程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中數組、ArrayList和List三者的區別詳解及實例

C#中數組、ArrayList和List三者的區別詳解及實例

編輯:C#入門知識

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集合內數據的對象類型。
比方:

List list = 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運用值類型,則需求思索完成和裝箱問題。

感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved