C#List和ArrayList以及數組之間的區別?

ArrayList

ArrayList是命名空間System.Collections下的一部分,在使用該類時必須進行引用,同時繼承了IList接口,提供了數據存儲和檢索。ArrayList對象的大小是按照其中存儲的數據來動態擴充與收縮的。所以,在聲明ArrayList對象時並不需要指定它的長度。
關於ArrayList的說法 無需再指定數組的長度,對數據元素的新增、修改、刪除和在任意位置的插入等操作都很方便,使用前需要System.Collections的引用。在插入不同類型的數據是被允許的,那是因爲ArrayList會把所有插入其中的數據當作爲object類型來處理,造成類型不安全的問題隱患,在檢索賦值的時候可能會提出類型不匹配的錯誤,且在存取數據的過程中會發生裝箱和拆箱的操作,造成很大的性能耗損,爲了彌補這缺陷,List<泛型>登上舞臺。


ArrayList list = new ArrayList();
 
//新增數據
list.Add("abc");
list.Add(123);
 
//修改數據
list[1] = 34;
 
//移除數據
list.RemoveAt(0);
 
//插入數據
list.Insert(0, "qwe");

數組

數組在C#中最早出現的。在內存中是連續存儲的,所以它的索引速度非常快,而且賦值與修改元素也很簡單。
數組、ArrayList和List可謂一脈相承,後者彌補前者的不足,但沒有完全取代前者的先天優勢, 1.關於數組的說法 數組概念不僅是在C#語言中最早出現的,在其他編程語言也不例外,該類型的數據在內存中是連續存儲的且帶有索引的,所以查找速度非常快,賦值也很簡單。在數組插入新元素不方便,在聲明數組的同時要指定數組的長度,如果定義太長就會造成內存浪費,定義太短就會造成數據溢出的錯誤,爲了彌補這個缺陷,ArrayList登上舞臺


//數組
string[] sz=new string[2];
 
//賦值
sz[0]="a";
sz[1]="b";
//修改
sz[1]="abc";

泛型List

因爲ArrayList存在不安全類型與裝箱拆箱的缺點,所以出現了泛型的概念。List類是ArrayList類的泛型等效類,它的大部分用法都與ArrayList相似,因爲List類也繼承了IList接口。最關鍵的區別在於,在聲明List集合時,我們同時需要爲其聲明List集合內數據的對象類型。


List<string> list = new List<string>();
 
//新增數據
list.Add(“abc”);
 
//修改數據
list[0] =123;
 
//移除數據
list.RemoveAt(0);

總結

數組的容量是固定的,您只能一次獲取或設置一個元素的值,而ArrayList或List的容量可根據需要自動擴充、修改、刪除或插入數據。
數組可以具有多個維度,而 ArrayList或 List< T> 始終只具有一個維度。但 是,您可以輕鬆創建數組列表或列表的列表。特定類型(Object 除外)的數組 的性能優於 ArrayList的性能。 這是因爲 ArrayList的元素屬於 Object 類型;所以在存儲或檢索值類型時通常發生裝箱和取消裝箱操作。不過,在不需要重新分配時(即最初的容量十分接近列表的最大容量),List< T> 的性能與同類型的數組十分相近。
在決定使用 List 還是使用ArrayList 類(兩者具有類似的功能)時,記住List 類在大多數情況下執行得更好並且是類型安全的。如果對List< T> 類的類型T 使用引用類型,則兩個類的行爲是完全相同的。但是,如果對類型T使用值類型,則需要考慮實現和裝箱問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章