程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ArrayList的使用和List<T>的比較,arraylist使用list

ArrayList的使用和List<T>的比較,arraylist使用list

編輯:C#入門知識

ArrayList的使用和List<T>的比較,arraylist使用list


使用非泛型集合類的限制可以通過編寫一小段程序來演示,該程序利用 .NET Framework 基類庫中的 ArrayList 集合類。ArrayList 是一個使用起來非常方便的集合類,無需進行修改即可用來存儲任何引用或值類型。

 

[csharp] view plaincopy
  1. // The .NET Framework 1.1 way to create a list:  
  2. System.Collections.ArrayList list1 = new System.Collections.ArrayList();  
  3. list1.Add(3);  
  4. list1.Add(105);  
  5.   
  6. System.Collections.ArrayList list2 = new System.Collections.ArrayList();  
  7. list2.Add("It is raining in Redmond.");  
  8. list2.Add("It is snowing in the mountains.");  

 

 

但這種方便是需要付出代價的。添加到 ArrayList 中的任何引用或值類型都將隱式地向上強制轉換為 Object。如果項是值類型,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低性能;在必須對大型集合進行循環訪問的情況下,裝箱和取消裝箱的影響非常明顯。

另一個限制是缺少編譯時類型檢查;因為 ArrayList 將把所有項都強制轉換為 Object,所以在編譯時無法防止客戶端代碼執行以下操作:

[csharp] view plaincopy
  1. System.Collections.ArrayList list = new System.Collections.ArrayList();  
  2. // Add an integer to the list.  
  3. list.Add(3);  
  4. // Add a string to the list. This will compile, but may cause an error later.  
  5. list.Add("It is raining in Redmond.");  
  6.   
  7. int t = 0;  
  8. // This causes an InvalidCastException to be returned.  
  9. foreach (int x in list)  
  10. {  
  11.     t += x;  
  12. }  

 

盡管將字符串和 ints 組合在一個 ArrayList 中的做法在創建異類集合時是完全合法的,有時是有意圖的,但這種做法更可能產生編程錯誤,並且直到運行時才能檢測到此錯誤。

在 C# 語言的 1.0 和 1.1 版本中,只能通過編寫自己的特定於類型的集合來避免 .NET Framework 基類庫集合類中的通用代碼的危險。當然,由於此類不可對多個數據類型重用,因此將喪失通用化的優點,並且您必須對要存儲的每個類型重新編寫該類。

ArrayList 和其他相似類真正需要的是:客戶端代碼基於每個實例指定這些類要使用的具體數據類型的方式。這樣將不再需要向上強制轉換為 T:System.Object,同時,也使得編譯器可以進行類型檢查。換句話說,ArrayList 需要一個 type parameter。這正是泛型所能提供的。在 N:System.Collections.Generic 命名空間的泛型 List<T> 集合中,向該集合添加項的操作類似於以下形式:

[csharp] view plaincopy
  1. // The .NET Framework 2.0 way to create a list  
  2. List<int> list1 = new List<int>();  
  3.   
  4. // No boxing, no casting:  
  5. list1.Add(3);  
  6.   
  7. // Compile-time error:  
  8. // list1.Add("It is raining in Redmond.");  


對於客戶端代碼,與 ArrayList 相比,使用 List<T> 時添加的唯一語法是聲明和實例化中的類型參數。雖然這稍微增加了些編碼的復雜性,但好處是您可以創建一個比 ArrayList 更安全並且速度更快的列表,特別適用於列表項是值類型的情況。


List<T>與ArrayList哪個性可以好

List是接口,ArrayList是List的一種實現,List還有另外一種實現LinkedList。這兩個中ArrayList是基於數組實現的,而LinkedList是基於鏈表實現的。具體的你可以查看Thinking in Java以及API文檔。

還以為你問的是Java了
List<T>是ArrayList的泛型,ArrayList裡邊的數據類型是object,List<T>裡邊的是具體的某種類型,ArrayList類似於向量,可以存儲不同的數據類型在一個數組裡邊(轉換為了object)。

一般使用的時候盡量使用List<T>,因為ArrayList存取都要進行一次轉換。所以應該是List<T>的性能要好一些吧
參考資料:blog.csdn.net/...2.aspx
 

c#中的array ,arraylist 與 list<T>的不同及主要作用范圍

3個都是數組,主要是用來存放數據用的。
區別在於:前2個是弱類型,沒有類型限制。
LIST<T>是泛型也稱之為強類型。其作用就是限制類型。
list<類型>,如果你定義了一個USER1類和一個USER2類,然後list<USER1>,然後你list<USER1> lu=new list<USER1>();
這裡你NEW出了一個對象,然後lu.add(數據);//注意這裡的數據必須是USER類型的,換句話說就必須是USER類的屬性。
如果你添加了USER2類的屬性或者其它類的屬性都會報錯,必須是USER類的屬性才可以。
這個就是強類型的作用。
 

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