Home

The ArrayList Class

 

Array Lists

 

Introduction

The main problem of traditional arrays is that their size is fixed by the number you specify when declaring the array variable: you cannot add items beyond the specified dimension. Another limitation is that you cannot insert an item inside the list. To overcome this, you can create a linked list. Instead of working from scratch, the .NET Framework provides the ArrayList class. With the ArrayList class, you can add new items to a list, insert items inside a list, arrange items of a list, check the existence of an item in a list, remove an item from the list, inquire about the list, or destroy the list. These operations are possible through various properties and methods.

The ArrayList class is defined in the System.Collections namespace. To use it, first declare a pointer to ArrayList. Here is an example:

private void Example()
{
	ArrayList lstNumbers = new ArrayList();
}

 

Practical Learning Practical Learning: Introducing the ArrayList Class

  1. If you have not done so, create the StoreItem library now
  2. Start Notepad and, in the empty file, type the following:
     
    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using StoreItem;
    
    namespace DepartmentStore2
    {
    	public class Exercise : System.Windows.Forms.Form
    	{
    		private System.Windows.Forms.TabControl tabDeptStore;
    		private System.Windows.Forms.TabPage pgeNewItem;
    		private System.Windows.Forms.Label lblItemNumber;
    		public System.Windows.Forms.TextBox txtItemNumber;
    		private System.Windows.Forms.Label lblDescription;
    		public System.Windows.Forms.TextBox txtDescription;
    		private System.Windows.Forms.Label lblItemSize;
    		public System.Windows.Forms.TextBox txtItemSize;
    		private System.Windows.Forms.Label lblUnitPrice;
    		public System.Windows.Forms.TextBox txtUnitPrice;
    		private System.Windows.Forms.Button btnAddItem;
    		private System.Windows.Forms.Label lblInventoryCount;
    		private System.Windows.Forms.TabPage pgeInventory;
    		private System.Windows.Forms.DataGrid grdInventory;
    		private System.Windows.Forms.Button btnClose;
    		
    		public Exercise()
    		{
    			InitializeComponent();
    
    		}
    
    		private void InitializeComponent()
    		{
    			this.tabDeptStore = new System.Windows.Forms.TabControl();
    			this.pgeNewItem = new System.Windows.Forms.TabPage();
    			this.lblItemNumber = new System.Windows.Forms.Label();
    			this.txtItemNumber = new System.Windows.Forms.TextBox();
    			this.lblDescription = new System.Windows.Forms.Label();
    			this.txtDescription = new System.Windows.Forms.TextBox();
    			this.lblItemSize = new System.Windows.Forms.Label();
    			this.txtItemSize = new System.Windows.Forms.TextBox();
    			this.lblUnitPrice = new System.Windows.Forms.Label();
    			this.txtUnitPrice = new System.Windows.Forms.TextBox();
    			this.btnAddItem = new System.Windows.Forms.Button();
    			this.lblInventoryCount = new System.Windows.Forms.Label();
    			this.pgeInventory = new System.Windows.Forms.TabPage();
    			this.grdInventory = new System.Windows.Forms.DataGrid();
    			this.btnClose = new System.Windows.Forms.Button();
    
    			// Label: Item Number
    			this.lblItemNumber.Location = new System.Drawing.Point(24, 20);
    			this.lblItemNumber.Size = new System.Drawing.Size(72, 16);
    			this.lblItemNumber.TabIndex = 1;
    			this.lblItemNumber.Text = "Item #:";
    			
    			// TextBox: Item Number
    			this.txtItemNumber.Location = new System.Drawing.Point(104, 16);
    			this.txtItemNumber.Size = new System.Drawing.Size(80, 20);
    			this.txtItemNumber.TabIndex = 2;
    			this.txtItemNumber.Text = "";
    			
    			// Label: Description
    			this.lblDescription.Location = new System.Drawing.Point(24, 52);
    			this.lblDescription.Name = "lblDescription";
    			this.lblDescription.Size = new System.Drawing.Size(80, 16);
    			this.lblDescription.TabIndex = 3;
    			this.lblDescription.Text = "Description:";
    
    			// TextBox: Description
    			this.txtDescription.Location = new System.Drawing.Point(104, 48);
    			this.txtDescription.Name = "txtDescription";
    			this.txtDescription.Size = new System.Drawing.Size(232, 20);
    			this.txtDescription.TabIndex = 4;
    			this.txtDescription.Text = "";
    			
    			// Label: Item Size
    			this.lblItemSize.Location = new System.Drawing.Point(24, 83);
    			this.lblItemSize.Size = new System.Drawing.Size(72, 16);
    			this.lblItemSize.TabIndex = 5;
    			this.lblItemSize.Text = "Item Size:";
    
    			// TextBox: Item Size
    			this.txtItemSize.Location = new System.Drawing.Point(104, 80);
    			this.txtItemSize.Size = new System.Drawing.Size(80, 20);
    			this.txtItemSize.TabIndex = 6;
    			this.txtItemSize.Text = "";
    
    			// Label: Unit Price
    			this.lblUnitPrice.Location = new System.Drawing.Point(200, 82);
    			this.lblUnitPrice.Size = new System.Drawing.Size(56, 16);
    			this.lblUnitPrice.TabIndex = 7;
    			this.lblUnitPrice.Text = "Unit Price:";
    
    			// TextBox: Unit Price
    			this.txtUnitPrice.Location = new System.Drawing.Point(264, 80);
    			this.txtUnitPrice.Size = new System.Drawing.Size(72, 20);
    			this.txtUnitPrice.TabIndex = 8;
    			this.txtUnitPrice.Text = "";
    			this.txtUnitPrice.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
    
    			// Button: Add Item
    			this.btnAddItem.DialogResult = System.Windows.Forms.DialogResult.OK;
    			this.btnAddItem.Location = new System.Drawing.Point(104, 112);
    			this.btnAddItem.Size = new System.Drawing.Size(232, 40);
    			this.btnAddItem.TabIndex = 9;
    			this.btnAddItem.Text = "Add Item";
    
    			// Label: Inventory Count 
    			this.lblInventoryCount.Location = new System.Drawing.Point(24, 176);
    			this.lblInventoryCount.Name = "lblInventoryCount";
    			this.lblInventoryCount.Size = new System.Drawing.Size(312, 23);
    			this.lblInventoryCount.TabIndex = 10;
    			this.lblInventoryCount.Text = "Inventory Count";
    		
    			// TabPage: New Item
    			this.pgeNewItem.Controls.Add(this.lblInventoryCount);
    			this.pgeNewItem.Controls.Add(this.btnAddItem);
    			this.pgeNewItem.Controls.Add(this.txtUnitPrice);
    			this.pgeNewItem.Controls.Add(this.lblUnitPrice);
    			this.pgeNewItem.Controls.Add(this.txtItemSize);
    			this.pgeNewItem.Controls.Add(this.lblItemSize);
    			this.pgeNewItem.Controls.Add(this.txtDescription);
    			this.pgeNewItem.Controls.Add(this.lblDescription);
    			this.pgeNewItem.Controls.Add(this.txtItemNumber);
    			this.pgeNewItem.Controls.Add(this.lblItemNumber);
    			this.pgeNewItem.Location = new System.Drawing.Point(4, 22);
    			this.pgeNewItem.Size = new System.Drawing.Size(432, 270);
    			this.pgeNewItem.TabIndex = 0;
    			this.pgeNewItem.Text = "New Item";
    			
    			// DataGrid: Inventory
    			this.grdInventory.AlternatingBackColor = System.Drawing.Color.LightGoldenrodYellow;
    			this.grdInventory.BackColor = System.Drawing.Color.White;
    			this.grdInventory.BackgroundColor = System.Drawing.Color.LightGoldenrodYellow;
    			this.grdInventory.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    			this.grdInventory.CaptionBackColor = System.Drawing.Color.LightGoldenrodYellow;
    			this.grdInventory.CaptionFont = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
    			this.grdInventory.CaptionForeColor = System.Drawing.Color.DarkSlateBlue;
    			this.grdInventory.DataMember = "";
    			this.grdInventory.FlatMode = true;
    			this.grdInventory.Font = new System.Drawing.Font("Tahoma", 8F);
    			this.grdInventory.ForeColor = System.Drawing.Color.DarkSlateBlue;
    			this.grdInventory.GridLineColor = System.Drawing.Color.Peru;
    			this.grdInventory.GridLineStyle = System.Windows.Forms.DataGridLineStyle.None;
    			this.grdInventory.HeaderBackColor = System.Drawing.Color.Maroon;
    			this.grdInventory.HeaderFont = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
    			this.grdInventory.HeaderForeColor = System.Drawing.Color.LightGoldenrodYellow;
    			this.grdInventory.LinkColor = System.Drawing.Color.Maroon;
    			this.grdInventory.Location = new System.Drawing.Point(8, 8);
    			this.grdInventory.ParentRowsBackColor = System.Drawing.Color.BurlyWood;
    			this.grdInventory.ParentRowsForeColor = System.Drawing.Color.DarkSlateBlue;
    			this.grdInventory.SelectionBackColor = System.Drawing.Color.DarkSlateBlue;
    			this.grdInventory.SelectionForeColor = System.Drawing.Color.GhostWhite;
    			this.grdInventory.Size = new System.Drawing.Size(416, 256);
    			this.grdInventory.TabIndex = 12;
    			
    			// TabPage: Inventory 
    			this.pgeInventory.Controls.Add(this.grdInventory);
    			this.pgeInventory.Location = new System.Drawing.Point(4, 22); 
    			this.pgeInventory.Size = new System.Drawing.Size(432, 270);
    			this.pgeInventory.TabIndex = 11;
    			this.pgeInventory.Text = "Store Inventory";
    			this.pgeInventory.Visible = false;
    			
    			 
    			// TabControl: Department Store
    			this.tabDeptStore.Controls.Add(this.pgeNewItem);
    			this.tabDeptStore.Controls.Add(this.pgeInventory);
    			this.tabDeptStore.ItemSize = new System.Drawing.Size(57, 18);
    			this.tabDeptStore.Location = new System.Drawing.Point(8, 8); 
    			this.tabDeptStore.SelectedIndex = 0;
    			this.tabDeptStore.Size = new System.Drawing.Size(440, 296);
    			this.tabDeptStore.TabIndex = 13;
    
    			// Button: Close
    			this.btnClose.Location = new System.Drawing.Point(368, 312);
    			this.btnClose.TabIndex = 14;
    			this.btnClose.Text = "Close";
    			this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
    			
    			// Form: Exercise 
    			this.AcceptButton = this.btnAddItem;
    			this.Size = new System.Drawing.Size(464, 376);
    			this.Controls.Add(this.btnClose);
    			this.Controls.Add(this.tabDeptStore);
    			this.MaximizeBox = false;
    			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    			this.Text = "Department Store";
    			this.Load += new System.EventHandler(this.Exercise_Load);
    
    		}
    		
    		static int Main() 
    		{
    			Application.Run(new Exercise());
    
    			return 0;
    		}
    
    		private void Exercise_Load(object sender, System.EventArgs e)
    		{
    			this.lblInventoryCount.Text = "";
    
    			DateTime tmeNow = DateTime.Now;
    			int mls = tmeNow.Millisecond;
    			// Generate two random numbers between 100 and 999
    			Random rndNumber = new Random(mls);
    			int NewNumber1 = rndNumber.Next(100, 999);
    			int NewNumber2 = rndNumber.Next(100, 999);
    			// Create an item number from the random numbers
    			String strItemNumber = NewNumber1.ToString() + "-" + NewNumber2.ToString();
    
    			// Display the created item number in the Item # text box
    			this.txtItemNumber.Text = strItemNumber;
    		}
    
    		private void btnClose_Click(object sender, System.EventArgs e)
    		{
    			Close();
    		}
    	}
    }
  3. To save the file, on the main menu of Notepad, click File -> Save...
  4. Locate your C:, D:, or any drive and display it in the Save In combo box
  5. If you have a folder named CSharpWindows, double-click it to display it in the Save In combo box.
    If you don't have it, click the Create New Folder button, type CSharpWindows and press Enter twice to display it in the Save In combo
  6. Click the Create New Folder button, type DepartmentStore2 and press Enter twice to display it in the Save In combo
  7. Change the Files of Type to All Files and change the File Name to Exercise.cs
  8. Click Save
  9. Open Windows Explorer or My Computer and open the folder that contains the StoreItem.dll library
  10. Copy the StoreItem.dll file and paste it in the DepartmentStore2 folder
  11. Open the Command Prompt and switch to the above DepartmentStore2 folder
  12. To create the project, type csc /r:StoreItem.dll Exercise.cs and press Enter
  13. To execute the project, type Exercise and press Enter
     
  14. Close the form and return to Notepad

Item Addition

The primary operation performed on a list is to create one. One of the biggest advantages of using a linked list is that you don't have to specify in advance the number of items of the list as done for an array. You can just start adding items. The ArrayList class makes this possible with the Add() method. Its syntax is:

public virtual int Add(object value);

The argument of this method is the value to add to the list. If the method succeeds with the addition, it returns the position where the value was added in the list. This is usually the last position in the list. Here are examples:

private void Example()
{
	ArrayList lstNumbers = new ArrayList();
				 
	lstNumbers.Add(452.35);
	lstNumbers.Add(47.58);
	lstNumbers.Add(273.48);
	lstNumbers.Add(9672.037);
	lstNumbers.Add(248.52);
}

If the method fails, the compiler would throw an error. One of the errors that could result from failure of this operation would be based on the fact that either a new item cannot be added to the list because the list is read-only, or the list was already full prior to adding the new item.

As you can create a array list that includes any value of type object, you can also create your own class and use it to create a list based on the ArrayList class. To use your own class, when creating it, make sure it is created as a managed object.

The ArrayList.Add() method is used to add one item at a time to the list. If you have more than one item to add, you can use the ArrayList.AddRange() method. Its syntax is:

public virtual void AddRange(ICollection c);

This method takes as argument a list and adds it to the current list.

The Add() method adds a new item at the end of the list. If you want to insert an item anywhere inside the list, you can call the Insert() method.

 

Practical Learning Practical Learning: Adding Items to an ArrayList List

  1. To create an inventory, change the file as follows:
     
    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using StoreItem;
    
    namespace DepartmentStore2
    {
    	public class Exercise : System.Windows.Forms.Form
    	{
    		. . . No Change
    		
    		private ArrayList StoreItems;
    
    		public Exercise()
    		{
    			InitializeComponent();
    
    		}
    
    		private void InitializeComponent()
    		{
    			. . . No Change			
    
    			// Button: Add Item
    			this.btnAddItem.DialogResult = System.Windows.Forms.DialogResult.OK;
    			this.btnAddItem.Location = new System.Drawing.Point(104, 112);
    			this.btnAddItem.Size = new System.Drawing.Size(232, 40);
    			this.btnAddItem.TabIndex = 9;
    			this.btnAddItem.Text = "Add Item";
    			this.btnAddItem.Click += new System.EventHandler(this.btnAddItem_Click);
    
    			. . . No Change
    			 
    			// TabControl: Department Store
    			this.tabDeptStore.Controls.Add(this.pgeNewItem);
    			this.tabDeptStore.Controls.Add(this.pgeInventory);
    			this.tabDeptStore.ItemSize = new System.Drawing.Size(57, 18);
    			this.tabDeptStore.Location = new System.Drawing.Point(8, 8); 
    			this.tabDeptStore.SelectedIndex = 0;
    			this.tabDeptStore.Size = new System.Drawing.Size(440, 296);
    			this.tabDeptStore.TabIndex = 13;
    this.tabDeptStore.SelectedIndexChanged += new System.EventHandler(this.tabDeptStore_SelectedIndexChanged);
    
    			. . . No Change
    
    		}
    
    		private void Exercise_Load(object sender, System.EventArgs e)
    		{
    			this.lblInventoryCount.Text = "";
    			this.StoreItems = new ArrayList();
    
    			DateTime tmeNow = DateTime.Now;
    			int mls = tmeNow.Millisecond;
    			// Generate two random numbers between 100 and 999
    			Random rndNumber = new Random(mls);
    			int NewNumber1 = rndNumber.Next(100, 999);
    			int NewNumber2 = rndNumber.Next(100, 999);
    			// Create an item number from the random numbers
    			String strItemNumber = NewNumber1.ToString() + "-" + NewNumber2.ToString();
    
    			// Display the created item number in the Item # text box
    			this.txtItemNumber.Text = strItemNumber;
    		}
    
    		private void btnAddItem_Click(object sender, System.EventArgs e)
    		{
    			// Make sure an item is complete before adding it to the inventory
    			if( this.txtItemNumber.Text.Equals("") )
    			{
    				MessageBox.Show("You must enter an item number to complete the record");
    				this.txtItemNumber.Focus();
    				return;
    			}
    
    			if( this.txtDescription.Text.Equals("") )
    			{
    				MessageBox.Show("You must provide a name for the item in order to create its record");
    				this.txtDescription.Focus();
    				return;
    			}
    
    			if( this.txtUnitPrice.Text.Equals("") )
    			{
    				MessageBox.Show("The price of the item is required before saving it");
    				this.txtUnitPrice.Focus();
    				return;
    			}
    
    			CStoreItem item = new CStoreItem();
    			item.ItemNumber = this.txtItemNumber.Text;
    			item.ItemName   = this.txtDescription.Text;
    			item.Size       = this.txtItemSize.Text;
    			item.UnitPrice  = decimal.Parse(this.txtUnitPrice.Text);
    			StoreItems.Add(item);
    			
    			DateTime tmeNow = DateTime.Now;
    			int mls = tmeNow.Millisecond;
    			// Generate two random numbers between 100 and 999
    			Random rndNumber = new Random(mls);
    			int NewNumber1 = rndNumber.Next(100, 999);
    			int NewNumber2 = rndNumber.Next(100, 999);
    			// Create an item number from the random numbers
    		string strItemNumber = String.Concat(NewNumber1.ToString(), "-", NewNumber2.ToString());
    
    			// Display the created item number in the Item # text box
    			this.txtItemNumber.Text = strItemNumber;
    			this.txtDescription.Text = "";
    			this.txtItemSize.Text = "";
    			this.txtUnitPrice.Text = "";
    			this.txtDescription.Focus();
    		}
    
    		private void tabDeptStore_SelectedIndexChanged(object sender, System.EventArgs e)
    		{
    			this.grdInventory.DataSource = null;
    			this.grdInventory.DataSource = StoreItems;
    		}
    		
    		static int Main() 
    		{
    			Application.Run(new Exercise());
    
    			return 0;
    		}
    	}
    }
  2. Save the file and return to the Command Prompt
  3. Compile the application by typing csc /r:StoreItem.dll Exercise.cs and pressing Enter
  4. Execute the project by typing Exercise and pressing Enter
  5. Try creating a few records (let the computer generate the item numbers):
     
    Item Name Size Unit Price
    Women Cashmere Lined Glove 8 115.95
    Men Trendy Jacket Medium 45.85
    Women Stretch Flare Jeans Petite 27.75
    Women Belted Sweater L 15.95
    Girls Classy Handbag One Size 95.95
    Women Casual Dress Shoes 9.5M 45.95
    Boys Hooded Sweatshirt M (7/8) 15.95
    Girls Velour Dress 10 12.55
    Women Lace Desire Panty M 7.15
    Infant Girls Ballerina Dress 12M 22.85
    Men Classic Pinstripe Suit 38 145.95
  6. Then click the Store Inventory tab
     
    Department Store - Inventory
  7. Close the form and return to Notepad

The Capacity of a List

After declaring an ArrayList variable, it may be empty. As objects are added to it, the list grows. The list can grow tremendously as you wish. The number of items of the list is managed through the memory it occupies and this memory grows as needed. The number of items that the memory allocated is currently using is represented by the ArrayList.Capacity property. This will usually be the least of your concerns.

If for some reason, you want to intervene and control the number of items that your ArrayList list can contain, you can manipulate the Capacity property. For example, you can assign it a constant to set the maximum value that the list can contain. Once again, you will hardly have any reason to use the Capacity property: the compiler knows what to do with it.

A Fixed Size List

A list is usually meant to grow and shrink as necessary. This also lets the compiler manage the memory occupied by the list. In some cases, you may want a list to have a fixed size. To set this flag, you can call the ArrayList.FixedSize() method. It is overloaded in two versions. One of them has the following syntax:

public static ArrayList FixedSize(ArrayList list);

If you set a fixed size on an ArrayList list, you may not be able to add a new item beyond the limit. In fact, if you attempt to do this, you may receive an error. A safe way is to check whether the list is fixed before performing a related operation. To find out whether a list is fixed, you can check the ArrayList.IsFixedSize property.

The Number of Items in the List

When using a list, at any time, you should be able to know the number of items that the list contains. This information is provided by the ArrayList.Count property. The Capacity and the Count have this in common: the value of each increases as the list grows and the same value decreases if the list shrinks. It is important to know that, although they look alike, there are various differences between the capacity of a list and the number of items it contains. Capacity is a read/write property. This means that, as we saw above, you can assign a value to the capacity to fix the number of items that the list can contain. You can also retrieve the value of the Capacity. The Count is read-only because it is used by the compiler to count the current number of items of the items and this counting is performed without your intervention.

Practical Learning Practical Learning: Counting Items

  1. To get a count of items while the user is adding them to the list, change the Click event of the Add Item button as follows:
     
    private void btnAddItem_Click(object sender, System.EventArgs e)
    		{
    			// Make sure an item is complete before adding it to the inventory
    			if( this.txtItemNumber.Text.Equals("") )
    			{
    				MessageBox.Show("You must enter an item number to complete the record");
    				this.txtItemNumber.Focus();
    				return;
    			}
    
    			if( this.txtDescription.Text.Equals("") )
    			{
    				MessageBox.Show("You must provide a name for the item in order to create its record");
    				this.txtDescription.Focus();
    				return;
    			}
    
    			if( this.txtUnitPrice.Text.Equals("") )
    			{
    				MessageBox.Show("The price of the item is required before saving it");
    				this.txtUnitPrice.Focus();
    				return;
    			}
    
    			CStoreItem item = new CStoreItem();
    			item.ItemNumber = this.txtItemNumber.Text;
    			item.ItemName   = this.txtDescription.Text;
    			item.Size       = this.txtItemSize.Text;
    			item.UnitPrice  = decimal.Parse(this.txtUnitPrice.Text);
    			StoreItems.Add(item);
    						
    this.lblInventoryCount.Text = String.Format("Store Current Inventory: {0} Item", this.StoreItems.Count.ToString()); 
    
    			DateTime tmeNow = DateTime.Now;
    			int mls = tmeNow.Millisecond;
    			// Generate two random numbers between 100 and 999
    			Random rndNumber = new Random(mls);
    			int NewNumber1 = rndNumber.Next(100, 999);
    			int NewNumber2 = rndNumber.Next(100, 999);
    			// Create an item number from the random numbers
    			String strItemNumber = NewNumber1.ToString() + "-" + NewNumber2.ToString();
    
    			// Display the created item number in the Item # text box
    			this.txtItemNumber.Text = strItemNumber;
    			this.txtDescription.Text = "";
    			this.txtItemSize.Text = "";
    			this.txtUnitPrice.Text = "";
    			this.txtDescription.Focus();
    		}
  2. Execute the application and add a few items to the inventory
     
    Department Store - An Item Added
  3. Close the form and return to your programming environment

A List Arrangement

When using the Add(), the AddRange(), or the Insert() methods to populate an ArrayList object, the item or the group of items is added to the end of the list in a consecutive manner. If you want to reverse this arrangement, you can call the Reverse() method. This method is provided in two versions. One of the versions has the following syntax:

public virtual void Reverse();

This method considers all items of a list and changes their positions in the exact opposite order: the first item becomes the last; the item before last becomes the second in the new list, and so on. If you want to reverse only a range of items in the list, you can use the other version of this method whose syntax is:

public virtual void Reverse(int index, int count);

In some cases, you may want the list to be arranged in an order validated by the language used on the computer. For example, if you create a list of names, you may want to display those names in alphabetical order. If you create a list of employees, you may want to display the list of employees by seniority, based on the date they were hired. The ability to arrange the list in a set order can be handled by the Sort() method. Its syntax is:

public virtual void Sort();

If the items in the list are made of strings, this method would arrange them in alphabetical order. If the items are numeric values, calling this method would arrange the list in incremental order. If the list is made of dates, when this method is called, the compiler would refer to the options set in the Regional Settings of the Control and arrange them accordingly in chronological order.

 

A Read-Only List

One of the reason for creating a list is to be able to add items to it, edit its items, retrieve an item, or delete items from it. These are the default operations. You can still limit these operations as you judge them unnecessary. For example, you may create a list and then initialize it with the items that you want the list to only have. If you don't intend to have the user adding items to it, you can create the list as read-only. To do this, you can call the ArrayList.ReadOnly() method. It is overloaded with two static versions as follows:

public static ArrayList ReadOnly(ArrayList list);
public static IList ReadOnly(IList list);

These methods are static. This means that you don't need to declare an instance of ArrayList to call them. Instead, to make the list read-only, call the ArrayList.ReadOnly() method and pass your ArrayList variable to it.

Some operations cannot be performed on a read-only list. To perform such operations, you can first find out whether an ArrayList list is read-only. This is done by checking its IsReadOnly property.

Item Retrieval

Once a list is ready, you can perform different types of operations on it. Besides adding items, one of the most regular operations performed on a list consists of locating and retrieving an item. You have various options. To retrieve a single item based on its position, you can use the Item property which accesses each item using square brackets. Like a normal array, an ArrayList list is zero-based. Another issue to keep in mind is that the ArrayList.Item[] property produces an Object value. Therefore, you may have to cast this value to your type of value to get it right. Here are examples of using this property:

Item Location

Instead of the square brackets that allow you to retrieve an item based on its position, you can look for an item based on its complete definition. You have various options. You can first "build" an item and ask the compiler to check whether any item in the list matches your definition. To perform this search, you can call the ArrayList.Contains() method. Its syntax is:

public virtual bool Contains(object item);

The item to look for is passed as argument to the method. The compiler would look for exactly the item, using its definition, in the list. If any detail of the argument fails to match any item of the ArrayList list, the method would return false. If all characteristics of the argument correspond to an item of the list, the method returns true.

Another option to look for an item in a list consists of calling the ArrayList.BinarySearch() method. It is overloaded in three versions and one of them uses the following syntax:

public virtual int BinarySearch(object value);

The item to look for is passed argument to the method.

 

Item Deletion

As opposed to adding an item to a list, you may want to remove one. To perform this operation, you have various options. You can ask the compiler to look for an item in the list and if, or once, the compile finds it, it would delete the item. To perform this type of deletion, you can call the ArrayList.Remove() method. Its syntax is:

public virtual void Remove(object obj);

This method accepts as argument the item that you want to delete from the list. To perform this operation, the list must not be read-only.

The Remove() method allows you to specify the exact item you want to delete from a list. Another option you have consists of deleting an item based on its position. This is done using the RemoveAt() method whose syntax is:

public virtual void RemoveAt(int index);

With this method, the position of the item is passed as argument. If the position is not valid because either it is lower or higher than the current Count, the compiler would throw an ArgumentOutOfRangeException exception.

To remove all items from a list at once, you can call the ArrayList.Clear() method. Its syntax is:

public virtual void Clear();

 

 

Home Copyright 2004 FunctionX, Inc.