Introduction
This is a simple demo on how to save Multi-Dimensional (Virtual) ArrayLists
to text
file, via a sample application.
About ArrayList
ArrayList
implements the IList
interface using an array
whose size is dynamically increased as required, the capacity of an ArrayList
is the number of elements the ArrayList
can hold. As elements are added to an ArrayList
, the capacity is automatically increased as required through reallocation; Elements
in ArrayList
collection can be accessed using an integer index
. Indexes in this collection are zero-based; ArrayList
accepts a null
reference (Nothing
in Visual Basic) as a valid value and allows duplicate elements. Using multidimensional arrays as elements in an ArrayList
collection is not supported.
As the newer .NET runtimes offer better collections in System.Collections.Generic
, ArrayList
are not using in many cases.
Advantages of ArrayList
- Automatic Resizing
- Convenient to use
ArrayList
has methods that will add, insert, and remove a range of elements
- Easy to create a thread-safe
ArrayList
using the Synchronized
method
- etc.
Disadvantages of ArrayList
ArrayList
is restricted to a single dimension with a lower bound of zero, (but it can be used to store objects
, we can use this feature to make the ArrayList
Multi-Dimensional (Virtual)).
ArrayList
is limited to accumulate only Objects
- Performance wise very slow
- etc.
Using the Code
This page does not display all the code, but the basic structure. Download the application source for a detailed investigation.
Basic Principle of Making an ArrayList Multi-Dimensional (Virtual)
As we know, ArrayList
can be used to store objects
. Here we are using this feature to make the ArrayList
Multi-Dimensional (Virtual)) as shown below.
Method 1
Dim _MainList As New ArrayList
Dim _InnerList As New ArrayList
_InnerList.Add("MyData")
_InnerList.Add ("MoreData")
Now we have to add inner ArrayList
to our main ArrayList
, so in effect we have a Multi-Dimensional (Virtual) ArrayList
.
_MainList.Add(_InnerList)
Method 2
Dim _MainList As New ArrayList
Dim _InnerList As Object
Now we have to add inner element
to our main ArrayList
, so in effect we have a Multi-Dimensional (Virtual) ArrayList
.
_MainList.Add(_InnerList)
Method 3
This time we are going to use a structure
as inner element
.
Public Structure Contacts
Private m_FirstName As String
Private m_LastName As String
Private m_Phone As String
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(ByVal value As String)
m_FirstName = value
End Set
End Property
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(ByVal value As String)
m_LastName = value
End Set
End Property
Public Property Phone() As String
Get
Return m_Phone
End Get
Set(ByVal value As String)
m_Phone = value
End Set
End Property
End Structure
Dim _MainList As New ArrayList
Dim _InnerList As New Contacts
_InnerList.FirstName = "Alex"
_InnerList.SecondName = "Tomy"
_InnerList.Phone = "123456789"
Now we have to add inner element
to our main ArrayList
, so in effect we have a Multi-Dimensional (Virtual) ArrayList
.
_MainList.Add(_InnerList)
Using the Code
This short article is presented as an example (Address Book) with simple steps to save Multi-Dimensional (Virtual) ArrayLists
to text
file.
The sample application consists of the following files:
Contacts.vb (Structure to manage contact details)
cLibrary.vb (Class
used to accomplish save ArrayList
{Multi-Dimensional} to file using an instance
of the structure Contacts
)
Step 1
First create the structure Contacts
(see Contacts.vb to understand how to..!!)
Step 2
Create a Class
to save ArrayList
{Multi-Dimensional} to file using an instance
of the structure Contacts
.
Friend Class cLibrary
End Class
Create a property called Library
As ArrayList
to manage the Multi-Dimensional ArrayList
of structure Contacts.
Public Property Library() As ArrayList
Get
Return m_Library
End Get
Set(ByVal value As ArrayList)
m_Library = value
End Set
End Property
How to Save an ArrayList to Text File?
Public Sub WriteToFile(ByVal _FileName As String, ByVal _ArrayList As ArrayList)
Dim oWrite As System.IO.StreamWriter
oWrite = File.CreateText(_FileName)
For i As Integer = 0 To _ArrayList.Count - 1
oWrite.WriteLine(_ArrayList.Item(i))
Next
oWrite.Close()
End Sub
How to Read a Text File to ArrayList?
Public Function ReadFromFile(ByVal _FileName As String) As ArrayList
Dim oRead As System.IO.StreamReader
Dim _ArrayList As New ArrayList
Dim _Contacts As New Contacts
_ArrayList.Clear()
If (File.Exists(_FileName) = True) Then
oRead = File.OpenText(_FileName)
While oRead.Peek <> -1
_Contacts.FromString(oRead.ReadLine())
_ArrayList.Add(_Contacts)
End While
oRead.Close()
End If
Return _ArrayList
End Function
(see cLibrary.vb
to understand how to..!!)
Step 3
Public Class FrmMain
Private _Lib As New cLibrary("ContactsLib.txt")
End Class
How to Add Item(s) to the Library from Form Class?
Dim _Contact As New Contacts
_Contact.FirstName = Trim(Me.TB_FirstName.Text)
_Contact.LastName = Trim(Me.TB_LastName.Text)
_Contact.Age = Val(Trim(Me.TB_Age.Text))
_Contact.PostBox = Trim(Me.TB_PostBox.Text)
_Contact.Street = Trim(Me.CB_Street.Text)
_Contact.City = Trim(Me.CB_City.Text)
_Contact.Phone = Trim(Me.TB_Phone.Text)
_Contact.Mobile = Trim(Me.TB_Mobile.Text)
_Contact.Email = Trim(Me.TB_Email.Text)
_Lib.Library.Add(_Contact)
_Lib.SaveLibrary()
How to Update an Existing Item in the Library from Form Class?
Dim _Index As Integer = _Lib.IndexOf(Me.CB_SelectContacts.Text)
Dim _Contact As New Contacts
_Contact.FirstName = Trim(Me.TB_FirstName.Text)
_Contact.LastName = Trim(Me.TB_LastName.Text)
_Contact.Age = Val(Trim(Me.TB_Age.Text))
_Contact.PostBox = Trim(Me.TB_PostBox.Text)
_Contact.Street = Trim(Me.CB_Street.Text)
_Contact.City = Trim(Me.CB_City.Text)
_Contact.Phone = Trim(Me.TB_Phone.Text)
_Contact.Mobile = Trim(Me.TB_Mobile.Text)
_Contact.Email = Trim(Me.TB_Email.Text)
_Lib.Library.Item(_Index) = _Contact
_Lib.SaveLibrary()
How to Remove an Existing Item in the Library from Form Class?
If (_Lib.Remove(Me.CB_SelectContacts.Text) = True) Then
_Lib.SaveLibrary()
End If
How to Retrieve Details of an Existing Item in the Library from Form Class?
Dim _Contact As New Contacts
_Contact = _Lib.GetDetails(Me.CB_SelectContacts.Text)
With _Contact
Me.TB_FullName.Text = .Name
Me.TB_FirstName.Text = .FirstName
Me.TB_LastName.Text = .LastName
Me.TB_Age.Text = .Age
Me.TB_PostBox.Text = .PostBox
Me.CB_Street.Text = .Street
Me.CB_City.Text = .City
Me.TB_Phone.Text = .Phone
Me.TB_Mobile.Text = .Mobile
Me.TB_Email.Text = .Email
End With
End Sub
(see FrmMain.vb to understand how to..!!)
Conclusion
There are probably bugs in my code; if you find any, please let me know and I will try to fix it. Comments and suggestions are most welcome.
Hope this can be helpful.
Happy programming!!!
History
- 18th August, 2010: Initial post