C#中數組、ArrayList和List三者的區別詳解及實例。本站提示廣大學習愛好者:(C#中數組、ArrayList和List三者的區別詳解及實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中數組、ArrayList和List三者的區別詳解及實例正文
在C#中數組,ArrayList,List都可以存儲一組對象,那麼這三者究竟有什麼樣的區別呢。
數組
數組在C#中最早呈現的。在內存中是延續存儲的,所以它的索引速度十分快,而且賦值與修正元素也很復雜。
//數組 string[] s=new string[2]; //賦值 s[0]="a"; s[1]="b"; //修正 s[1]="a1";
但是數組存在一些缺乏的中央。在數組的兩個數據間拔出數據是很費事的,而且在聲明數組的時分必需指定數組的長度,數組的長渡過長,會形成內存糜費,過段會形成數據溢出的錯誤。假如在聲明數組時我們不清楚數組的長度,就會變得很費事。
針對數組的這些缺陷,C#中最先提供了ArrayList對象來克制這些缺陷。
ArrayList
ArrayList是命名空間System.Collections下的一局部,在運用該類時必需停止援用,同時承繼了IList接口,提供了數據存儲和檢索。ArrayList對象的大小是依照其中存儲的數據來靜態擴大與膨脹的。所以,在聲明ArrayList對象時並不需求指定它的長度。
//ArrayList ArrayList list1 = new ArrayList(); //新增數據 list1.Add("cde"); list1.Add(5678); //修正數據 list[2] = 34; //移除數據 list.RemoveAt(0); //拔出數據 list.Insert(0, "qwe");
從下面例子看,ArrayList仿佛是處理了數組中一切的缺陷,為什麼又會有List?
我們從下面的例子看,在List中,我們不只拔出了字符串cde,而且拔出了數字5678。這樣在ArrayList中拔出不同類型的數據是允許的。由於ArrayList會把一切拔出其中的數據當作為object類型來處置,在我們運用ArrayList處置數據時,很能夠會報類型不婚配的錯誤,也就是ArrayList不是類型平安的。在存儲或檢索值類型時通常發作裝箱和取消裝箱操作,帶來很大的功能耗損。
裝箱與拆箱的概念:
復雜的說:
裝箱:就是將值類型的數據打包到援用類型的實例中
比方將string類型的值abc賦給object對象obj
String i="abc"; object obj=(object)i;
拆箱:就是從援用數據中提取值類型
比方將object對象obj的值賦給string類型的變量i
object obj="abc"; string i=(string)obj;
裝箱與拆箱的進程是很損耗功能的。
泛型List
由於ArrayList存在不平安類型與裝箱拆箱的缺陷,所以呈現了泛型的概念。List類是ArrayList類的泛型等效類,它的大局部用法都與ArrayList類似,由於List類也承繼了IList接口。最關鍵的區別在於,在聲明List集合時,我們同時需求為其聲明List集合內數據的對象類型。
比方:
Listlist = new List (); //新增數據 list.Add("abc"); //修正數據 list[0] = "def"; //移除數據 list.RemoveAt(0);
上例中,假如我們往List集合中拔出int數組123,IDE就會報錯,且不能經過編譯。這樣就防止了後面講的類型平安問題與裝箱拆箱的功能問題了。
總結:
數組的容量是固定的,您只能一次獲取或設置一個元素的值,而ArrayList或List<T>的容量可依據需求自動擴大、修正、刪除或拔出數據。
數組可以具有多個維度,而 ArrayList或 List< T> 一直只具有一個維度。但是,您可以輕松創立數組列表或列表的列表。特定類型(Object 除外)的數組 的功能優於 ArrayList的功能。 這是由於 ArrayList的元素屬於 Object 類型;所以在存儲或檢索值類型時通常發作裝箱和取消裝箱操作。不過,在不需求重新分配時(即最初的容量非常接近列表的最大容量),List< T> 的功能與同類型的數組非常相近。
在決議運用 List<T> 還是運用ArrayList 類(兩者具有相似的功用)時,記住List<T> 類在大少數狀況下執行得更好並且是類型平安的。假如對List< T> 類的類型T 運用援用類型,則兩個類的行為是完全相反的。但是,假如對類型T運用值類型,則需求思索完成和裝箱問題。
感激閱讀,希望能協助到大家,謝謝大家對本站的支持!