ArrayList 和 List 集合型別
System.Collections.ArrayList 或 System.Collections.Generic.List<T> 物件是一個複雜版本的陣列。 ArrayList 類別和 List<T> 泛型類別提供的部分功能在大部分 System.Collections 類別中也都有提供 (但 Array 類別除外)。 例如:
Array 的容量是固定的,ArrayList 或 List<T> 的容量卻是按照需要自動擴充的。 如果 ArrayList.Capacity 屬性的值變更,則記憶體重新配置和項目複製會自動完成。
ArrayList 和 List<T> 提供加入、插入或移除元素範圍的方法。 在 Array 中,您一次只可以取得或設定一個元素的值。
使用 Synchronized 方法可以很輕鬆建立同步版本的 ArrayList,但這種同步處理很沒有效率。 Array 和 List<T> 類別則會讓使用者自己決定是否實作同步處理。 System.Collections.Concurrent 命名空間不會提供並行清單型別,但是會提供 ConcurrentQueue<T> 和 ConcurrentStack<T> 型別。
ArrayList 和 List<T> 所提供的方法,可以將固定大小的唯讀包裝函式傳回給集合。 Array 則沒有這種方法。
另一方面,Array 提供了某些 ArrayList 和 List<T> 所沒有的彈性。 例如:
Array 可以有多個維度,但 ArrayList 或 List<T> 則永遠只有一個維度。 不過,您可以輕鬆地建立陣列的清單或清單的清單。
特定類型的 Array (而不是 Object) 提供比 ArrayList 更高的效能。 這是因為 ArrayList 的項目是 Object 型別,因此當您儲存或擷取值型別時,通常會發生 boxing 和 unboxing。 然而,List<T> 在不需要重新配置的情況下 (亦即估計的初始容量很接近清單最大大小),可提供與相同型別的陣列相近的效能。
大部分情況下,可以使用 ArrayList 或 List<T> 來取代陣列呼叫;它們比較容易使用,並且一般而言,具有與相同型別的陣列相似的效能。
Array 位於 System 命名空間 (Namespace);ArrayList 位於 System.Collections 命名空間;List<T> 位於 System.Collections.Generic 命名空間。