可変長のデータを扱えるのですが、型の情報が欠落するため、取り出した後にキャスト等の処理が必要になるという手間があります。
System.Colections.Generic名前空間に定義されているジェネリクスコレクションでは型変換の手間がなくなったため、今では使用機会があまりありません。
使用機会は減りましたが、そのデータ構造は重要なものであり、型情報を持つジェネリクスコレクションでも同様に使われます。
ArrayList
配列を可変長にしたようなもの。Add,Remove,Insert,Clearなど一通りの操作が出来るメソッド群も定義されています。
ArrayList array = new ArrayList();
array .Add("Red");
array .Add("Blue");
array .Add("Yellow");
array .RemoveAt(1);
int count = arrayList.Count; // 2
Queue

キューに挿入することをエンキュー、取り出すことをデキュー、取り出さないけど次の対象を覗くことをピークという。
Queue queue = new Queue();
queue.Enqueue("AAAA");
queue.Enqueue("BBBB");
queue.Enqueue("CCCC");
string value1 = (string)queue.Dequeue(); // AAAA 先頭の値を削除し取得
string value2 = (string)queue.Peek(); // BBBB 先頭の値を削除せず取得
string value3 = (string)queue.Dequeue(); // BBBB 先頭の値を削除し取得
Stack

スタックに積むことをプッシュ、取り出すことをポップ、取り出さないけど次の対象を覗くことをピークという。
Stack stack = new Stack();
stack.Push("AAAA");
stack.Push("BBBB");
stack.Push("CCCC");
string value4 = (string)stack.Pop(); // CCCC 最後の値を削除し取得
string value5 = (string)stack.Peek(); // BBBB 最後の値を削除せず取得
string value6 = (string)stack.Pop(); // BBBB 最後の値を削除し取得
HashTable

キーの重複はできない。
Hashtable hashTable = new Hashtable();
hashTable.Add("us", "United States");
hashTable.Add("jp", "Japan");
hashTable.Add("fr", "France");
string country = (string)hashTable["jp"]; // Japan
bool isExistKey = hashTable.ContainsKey("uk"); // false
foreach(DictionaryEntry entry in hashTable)
{
Console.WriteLine("KEY:{entry.Key},VALUE{entry.Value}");
}
コレクションの独自実装
System.Collections名前空間には独自にコレクションを実装する際に継承すべきインタフェースや基底クラスが定義されています。これもジェネリクスコレクションの登場で独自実装する機会がほぼ無くなりました。