ArrayList ใช้เมธอด Add(object) เพิ่มอ็อบเจ็กต์ที่ท้ายของลิสต์ เนื่องจากเป็น non-generic จึงรับพารามิเตอร์เป็น object สามารถเพิ่มได้ทุกประเภท (value types จะถูก boxing)
ตัวอย่างโค้ดที่ 1: เพิ่มสตริง
using System;
using System.Collections;
public class Demo
{
public static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("Tim");
list.Add("Katie");
list.Add("Amy");
list.Add("Carlos");
list.Add("Chris");
list.Add("Jason");
Console.WriteLine("Elements in ArrayList...");
foreach (string res in list)
{
Console.WriteLine(res);
}
}
}
ผลลัพธ์
Elements in ArrayList...
Tim
Katie
Amy
Carlos
Chris
Jason
ตัวอย่างโค้ดที่ 2: เปรียบเทียบสอง ArrayList
using System;
using System.Collections;
public class Demo
{
public static void Main(string[] args)
{
ArrayList list1 = new ArrayList();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");
list1.Add("E");
list1.Add("F");
list1.Add("G");
list1.Add("H");
list1.Add("I");
Console.WriteLine("Elements in ArrayList1...");
foreach (string res in list1)
{
Console.WriteLine(res);
}
ArrayList list2 = new ArrayList();
list2.Add("1");
list2.Add("2");
list2.Add("3");
list2.Add("4");
list2.Add("5");
list2.Add("6");
Console.WriteLine("Elements in ArrayList2...");
foreach (string res in list2)
{
Console.WriteLine(res);
}
Console.WriteLine("Is ArrayList1 equal to ArrayList2? = " + list1.Equals(list2));
}
}
ผลลัพธ์
Elements in ArrayList1...
A
B
C
D
E
F
G
H
I
Elements in ArrayList2...
1
2
3
4
5
6
Is ArrayList1 equal to ArrayList2? = False
ข้อสังเกตสำคัญ
Add(object)เพิ่มที่ท้ายลิสต์ คืนค่า index (int) ของรายการที่เพิ่งเพิ่มEquals()ของ ArrayList เปรียบเทียบ reference equality ไม่ใช่ค่า - list1.Equals(list2) จะเป็น true ก็ต่อเมื่ออ้างอิงอ็อบเจ็กต์เดียวกัน- ใช้
AddRange(ICollection)เพื่อเพิ่มหลายรายการพร้อมกัน - ArrayList ขยาย capacity อัตโนมัติ (0 → 4 → 8 → 16 → 32...)
ArrayList vs List<T> - ทำไมควรใช้ List<T>
| หัวข้อ | ArrayList | List<T> |
|---|---|---|
| Type Safety | ไม่มี (object) | มี (compile-time) |
| Boxing/Unboxing | จำเป็นสำหรับ value types | ไม่จำเป็น |
| Performance | ช้ากว่า | เร็วกว่า |
| Memory | มากกว่า (boxing overhead) | น้อยกว่า |
| LINQ Support | จำกัด | เต็มรูปแบบ |
แนวทางปฏิบัติที่ดี (Best Practice)
หลีกเลี่ยง ArrayList ในโค้ดใหม่ ใช้ List<T> แทนเสมอ ยกเว้นกรณีที่ต้องรักษาความเข้ากันได้กับ .NET Framework 1.0/1.1 เก่าๆ