.NET C#基礎概念系列(一)-- 簡述string[]、ArrayList和List的區別
數組的定義:
數組是特殊的定長線性表,即線性表中的元素又是一個線性表,n維數組是一種“同構”的數據結構,其中每個數據元素類型相同,結構一致。
數組結構的特點:
(1)數組分配在一塊連續的數據空間上,因此在分配空間時必須確定長度。
(2)數據元素類型相同。
(3)數據元素的下標具有上下邊界約束且下標有序。
數組的優缺點:
優點:
(1)數組在內存中是連續存儲的,所以它的索引速度非常快,而且賦值與修改元素也很簡單,效率高,為o(1)。
(2)可以使用折半方法查找元素,效率較高。
string[] array = new string[3]; //賦值 array[0] = "a"; array[1] = "b"; array[2] = "c"; //修改 array[2] = "a1";
缺點:
(1)數組必須在聲明的時候指定數組長度和維數,並且在存取數組元素的時候不能越界,越界會造成數據溢出錯誤。
(2)插入和刪除元素效率比較低,且比較麻煩。
ArrayList的定義
ArrayList是動態數組,是Array的復雜版本,它提供了動態添加和減少元素,實現了ICollection和IList接口,可以靈活設置數組的大小。
ArrayList的特點
(1)ArrayList數組的長度可以動態指定,其大小可以在初始化時指定,也可以不指定,因此其在托管堆上存放並不一定連續。
(2)ArrayList數據可以存放不同類型數據(因為它里面存放的都是被裝箱了的Object類型,實際上ArrayList內部就是使用"object[] _items;"這樣一個私有字段來封裝對象的)。
(3)ArrayList可以在任意位置插入或刪除數項。
ArrayList的優缺點
優點:
(1)初始化時可以不指定長度,並且可以動態插入或刪除項,其長度可以動態擴充和收縮。
(2)存放的數據類型可以是不同類型的數據。
ArrayList arrayList = new ArrayList(); //添加 arrayList.Add("a"); arrayList.Add("b"); 結果為ab //插入 arrayList.Insert(0,"cc"); 結果為ccab //移除 //從ArrayList中移除特定對象的第一個匹配項,注意是第一個 arrayList.Remove('c'); 結果為cab //移除ArrayList的指定索引處的元素 arrayList.RemoveAt(0); 結果為ab; //清除所有元素 arrayList.Clear(); //排序 arrayList.Sort(); //查找 arrayList.IndexOf("a")
缺點:
(1)ArrayList不是類型安全的,其插入的數據當做Object類型處理,因此在處理數據是可能會報類型不匹配錯誤。
(2)由於存在裝箱和拆箱操作,會帶來很大的性能損耗,所以存取效率低。
List的定義
List是ArrayList的范型等效類,List類也繼承了IList接口,其大部分用法與ArrayList相似,最關鍵的區別是,在聲明List集合時需要為其聲明List集合內數據的對象類型,往List中插入其它(非聲明數據類型)數據類型元素時將會報錯,因此其是類型安全的。
數組結構的特點:
(1)聲明時必須指定數據集內元素的數據類型,且數據元素類型必須相同。
(2)可以動態插入或刪除數據元素。
(3)數據操作是類型安全的且不存在裝箱和拆箱操作,因此效率較高。