|
|
|
|
|
|
在本文中,我們將看到兩種存儲類型:ArrayList 和 List,我將從5個方面對它們進行比較,并最后提出使用建議。
概述
ArrayList 是一種非泛型集合類型,允許用戶存儲任何數據類型的對象,它在System.Collections命名空間下可用。
List 是一種通用集合類型,允許用戶存儲聲明時由 List 指定的數據類型的對象。它是一個非常強類型的集合,在System.Collections.Generic命名空間下可用。
ArrayList類用于在 C# 中聲明一個 ArrayList。ArrayList在其中存儲對象引用。這意味著 ArrayList可以在其中存儲多種數據類型的數據,如整數、字符串、浮點數等。下面的代碼示例向我們展示了如何在 C# 中初始化 ArrayList。
ArrayList array1 = new ArrayList();
array1.Add(1);
array1.Add("Pony");
foreach (var x in array1)
{
Console.WriteLine(x);
}
輸出
1
Pony
在上面的代碼中,我們創建了ArrayList類的實例:array1,并在其中存儲了不同數據類型的不同值。
通用列表用于保存 C# 中一種特定數據類型的數據。List類用于在 C# 中聲明特定數據類型的列表。我們需要在聲明時指定列表的數據類型。下面的代碼示例向我們展示了如何在 C# 中初始化 List。
List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
foreach (var x in list1 )
{
Console.WriteLine(x);
}
輸出
1
2
在上面的代碼中,我們創建了List類的實例:list1,它包含整數數據類型和存儲的整數值。
比較 ArrayList 和 List
讓我們嘗試比較不同類別下的 ArrayList 和 List。
從本質上講,ArrayList 包含一個異構的對象集合,這意味著在 ArrayList 的單個實例中,我們可以存儲任何數據類型的對象。而 List 被設計為僅保存同類對象的集合,這意味著在單個實例中,我們只能存儲一種數據類型的對象。
讓我們看一個 ArrayList 存儲不同對象類型的例子:
using System.Collections;
var arrayList = new ArrayList();
arrayList.Add(1); // integer
arrayList.Add(2);
arrayList.Add("3"); // string
現在讓我們看一個關于 List 的例子,它只允許一種對象:
using System.Collections.Generic;
var list = new List<int>();
list.Add(1); // allows only integer values
list.Add(2);
list.Add(3);
使用 ArrayList,在訪問存儲異構對象的集合時,我們總是可以預料到運行時錯誤。但是 List 是一個強類型集合,它允許定義T為List<T>,因此,如果我們試圖存儲為T指定的以外的任何內容,應用程序將拋出編譯時錯誤。
現在,使用相同的list實例,如果我們嘗試添加一個字符串,我們將面臨編譯錯誤:
list.Add("4"); // 拋出編譯時錯誤我們在使用 ArrayList 時,經常需要我們對正在訪問的對象進行裝箱或拆箱,以避免出現任何錯誤。但是對于 List,情況絕非如此。
讓我們看看如何:
int sum = 0;
foreach (var item in arrayList)
{
sum += Convert.ToInt32(item);
}
Console.WriteLine($"Sum is {sum}");
輸出
Sum is 6
正如我們在 ArrayList 中看到的那樣,我們必須使用Convert.ToInt32()轉換"3"為3,才能使計算正常進行并避免運行時錯誤。
但對于 List,我們不需要這樣做:
int sum = 0;
foreach (var item in list)
{
sum += item;
}
Console.WriteLine($"Sum is {sum}");
輸出仍然是一樣的:
Sum is 6
正如我們所看到的,List 是類型安全的,我們根本不需要進行任何類型轉換。
通常,List 比 ArrayList 更節省內存,因為它不必為集合中的每個元素存儲對象引用。相反,它將元素直接存儲在數組中。而 ArrayList 將元素存儲在內部數組中,并且當我們增加數組大小時需要分配額外的內存。
從我們目前所看到的來看,List 比 ArrayList 的內存效率更高。此外,類型安全使其比 ArrayList 的性能更高效。與 ArrayList 相比, List 具有更好的 API 支持,并且通過它提供的方法和屬性可以更快地訪問元素。參閱文章:
使用偏好
正如我們現在所知,ArrayList 可以靈活地存儲任何數據類型的對象,因此如果類型安全確實不是問題,我們可以使用它。此外,如果我們正在開發的應用程序的目標是 .NET Framework 版本.NET 2.0 或更低版本,我們可以繼續使用 ArrayList。但是,如果我們正在使用等于或高于 .NET 3.0 的框架,我們總是可以更喜歡 List 而不是 ArrayList,原因有很多,我們在前面的部分已經看到了。
使用 ArrayList 和 List 時的建議
到目前為止,我們已經可以看到我們可以使用這兩個集合來執行類似的功能。然而 List 是 ArrayList 的更新更好的版本。
俗話說——新的總是更好的。對于任何新的開發,List 應該始終是我們的首選。其實微軟也是這么建議的。僅當應用程序仍以低于 .NET 3.0 的框架為目標或絕對必要時,我們才可以使用 ArrayList。
總結
在本文中,我們了解了 ArrayList 和 List 以及何時使用它們。很明顯,List 在任何比較中都勝過 ArrayList,因為它更高效、更好且類型安全。
相關文章
