第一 : ArrayList(非泛型集合) 與List(泛型集合)數組
ArrayList 是數組的複雜版本。ArrayList 類提供在大多數 Collections 類中提供但不在 Array(數組。Array 類提供了各類用於數組的屬性和方法。) 類中提供的一些功能:安全
1.Array 的容量是固定的,而 ArrayList 的容量是根據須要自動擴展的。性能
2.ArrayList 提供添加、插入或移除某一範圍元素的方法。在 Array 中,您只能一次獲取或設置一個元素的值。spa
3.使用 Synchronized 方法能夠很容易地建立 ArrayList 的同步版本。而 Array 將一直保持它直到用戶實現同步爲止。3d
4.ArrayList 提供將只讀和固定大小包裝返回到集合的方法。而 Array 不提供。blog
5.Array 提供 ArrayList 所不具備的某些靈活性:索引
a.能夠設置 Array 的下限,但 ArrayList 的下限始終爲零。內存
b.Array 能夠具備多個維度,而 ArrayList 始終只是一維的。同步
c.特定類型(不包括 Object)的 Array 的性能比 ArrayList 好,這是由於 ArrayList 的元素屬於 Object 類型,因此在存儲或檢索值類型時一般發生裝箱和取消裝箱。io
d.要求一個數組的大多數狀況也能夠代之以使用 ArrayList。它更易於使用,而且一般具備與 Object 類型的數組相似的性能。
6.Array 位於 System 命名空間中;ArrayList 位於 System.Collections 命名空間中。
下面以ArrayList與List<T>爲例說明泛型集合的優勢及非泛型集合的缺點。例如,有這麼一段代碼:
,ArrayList中將全部元素都當作Object類型的,是引用類型。調用Add方法增長兩個整數,在這個過程當中,整數1,2被CLR裝箱(boxing)成object類型的,然後二個元素時又被拆箱(unboxing),裝箱與拆箱大致上會發生如下過程
1. 在託管堆中分配一個新的object
2. 基於棧(stack-based)的數據必須移動到剛非配的內存區中
3. 當拆箱時,位於堆中的數據又得移動到棧中
4. 堆中無用的數據進行垃圾回收
當涉及大量裝箱與拆箱操做時,必然會影響應用程序的性能。而是用泛型的集合類時就會減小裝箱與拆箱的工做,當存在大量數據時,天然能夠提升不少性能。
泛型集合List<T>
泛型最重要的應用就是集合操做,使用泛型集合能夠提升代碼重用性,類型安全和更佳的性能。
List<T>的用法和ArrayList類似,List<T>有更好的類型安全性,無須拆,裝箱。
在泛型定義中,泛型類型參數「<T>」是必須指定的,其中T是定義泛型類時的佔位符,其並非一種類型,僅表明某種可能的類型。在定義時T會被使用的類型代替。泛型集合List<T>中只能有一個參數類型,「<T>」中的T能夠對集合中的元素類型進行約束。
List<T>和ArrayList的區別
List<T>和ArrayList的相同點:添加元素、刪除元素、經過索引訪問元素方法相同。
List<T>和ArrayList的不一樣點:
ArrayList能夠添加任意類型元素;List<T>對添加的元素具備類型約束;
ArratList添加時裝箱,讀取時拆箱;List<T>不須要裝箱,拆箱操做;
第二 :HashTable(非泛型集合)對應Dictionary(泛型集合)
Hashtable 和 Dictionary <K, V> 類型