技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

5方面比較C# ArrayList和List的異同及使用建議

作者:admin    時間:2023-5-13 11:20:21    瀏覽:

在本文中,我們將看到兩種存儲類型:ArrayListList,我將從5個方面對它們進行比較,并最后提出使用建議。

概述

ArrayList 是一種非泛型集合類型,允許用戶存儲任何數(shù)據(jù)類型的對象,它在System.Collections命名空間下可用。

List 是一種通用集合類型,允許用戶存儲聲明時由 List 指定的數(shù)據(jù)類型的對象。它是一個非常強類型的集合,在System.Collections.Generic命名空間下可用。

C#中的ArrayList

ArrayList類用于在 C# 中聲明一個 ArrayListArrayList在其中存儲對象引用。這意味著 ArrayList可以在其中存儲多種數(shù)據(jù)類型的數(shù)據(jù),如整數(shù)、字符串、浮點數(shù)等。下面的代碼示例向我們展示了如何在 C# 中初始化 ArrayList。

ArrayList array1 = new ArrayList();
array1.Add(1);
array1.Add("Pony");
foreach (var x in array1)
{
    Console.WriteLine(x);
}

輸出

1
Pony

在上面的代碼中,我們創(chuàng)建了ArrayList類的實例:array1,并在其中存儲了不同數(shù)據(jù)類型的不同值。

C#中的List

通用列表用于保存 C# 中一種特定數(shù)據(jù)類型的數(shù)據(jù)。List類用于在 C# 中聲明特定數(shù)據(jù)類型的列表。我們需要在聲明時指定列表的數(shù)據(jù)類型。下面的代碼示例向我們展示了如何在 C# 中初始化 List

List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
foreach (var x in list1 )
{
    Console.WriteLine(x);
}

輸出

1
2

在上面的代碼中,我們創(chuàng)建了List類的實例:list1,它包含整數(shù)數(shù)據(jù)類型和存儲的整數(shù)值。

比較 ArrayList 和 List

讓我們嘗試比較不同類別下的 ArrayListList

集合性質(zhì)

從本質(zhì)上講,ArrayList 包含一個異構(gòu)的對象集合,這意味著在 ArrayList 的單個實例中,我們可以存儲任何數(shù)據(jù)類型的對象。而 List 被設(shè)計為僅保存同類對象的集合,這意味著在單個實例中,我們只能存儲一種數(shù)據(jù)類型的對象。

讓我們看一個 ArrayList 存儲不同對象類型的例子:

using System.Collections;
var arrayList = new ArrayList();
arrayList.Add(1); // integer
arrayList.Add(2);
arrayList.Add("3"); // string

現(xiàn)在讓我們看一個關(guān)于 List 的例子,它只允許一種對象:

using System.Collections.Generic;
var list = new List<int>();
list.Add(1); // allows only integer values 
list.Add(2);
list.Add(3);

容易出錯

使用 ArrayList,在訪問存儲異構(gòu)對象的集合時,我們總是可以預(yù)料到運行時錯誤。但是 List 是一個強類型集合,它允許定義TList<T>,因此,如果我們試圖存儲為T指定的以外的任何內(nèi)容,應(yīng)用程序?qū)伋?strong>編譯時錯誤。

現(xiàn)在,使用相同的list實例,如果我們嘗試添加一個字符串,我們將面臨編譯錯誤:

list.Add("4"); // 拋出編譯時錯誤

裝箱/拆箱需求

我們在使用 ArrayList 時,經(jīng)常需要我們對正在訪問的對象進行裝箱或拆箱,以避免出現(xiàn)任何錯誤。但是對于 List,情況絕非如此。

讓我們看看如何:

int sum = 0;
foreach (var item in arrayList)
{
    sum += Convert.ToInt32(item);
}
Console.WriteLine($"Sum is {sum}");

輸出

Sum is 6

正如我們在 ArrayList 中看到的那樣,我們必須使用Convert.ToInt32()轉(zhuǎn)換"3"為3,才能使計算正常進行并避免運行時錯誤。

但對于 List,我們不需要這樣做:

int sum = 0;
foreach (var item in list)
{
    sum += item;
}
Console.WriteLine($"Sum is {sum}");

輸出仍然是一樣的:

Sum is 6

正如我們所看到的,List 是類型安全的,我們根本不需要進行任何類型轉(zhuǎn)換。

內(nèi)存管理

通常,ListArrayList 更節(jié)省內(nèi)存,因為它不必為集合中的每個元素存儲對象引用。相反,它將元素直接存儲在數(shù)組中。而 ArrayList 將元素存儲在內(nèi)部數(shù)組中,并且當(dāng)我們增加數(shù)組大小時需要分配額外的內(nèi)存。

性能效率

從我們目前所看到的來看,ListArrayList 的內(nèi)存效率更高。此外,類型安全使其比 ArrayList 的性能更高效。與 ArrayList 相比, List 具有更好的 API 支持,并且通過它提供的方法和屬性可以更快地訪問元素。參閱文章:

使用偏好

正如我們現(xiàn)在所知,ArrayList 可以靈活地存儲任何數(shù)據(jù)類型的對象,因此如果類型安全確實不是問題,我們可以使用它。此外,如果我們正在開發(fā)的應(yīng)用程序的目標(biāo)是 .NET Framework 版本.NET 2.0 或更低版本,我們可以繼續(xù)使用 ArrayList。但是,如果我們正在使用等于或高于 .NET 3.0 的框架,我們總是可以更喜歡 List 而不是 ArrayList,原因有很多,我們在前面的部分已經(jīng)看到了。 

使用 ArrayList 和 List 時的建議

到目前為止,我們已經(jīng)可以看到我們可以使用這兩個集合來執(zhí)行類似的功能。然而 ListArrayList 的更新更好的版本。

俗話說——新的總是更好的。對于任何新的開發(fā),List 應(yīng)該始終是我們的首選。其實微軟也是這么建議的。僅當(dāng)應(yīng)用程序仍以低于 .NET 3.0 的框架為目標(biāo)或絕對必要時,我們才可以使用 ArrayList。

總結(jié)

在本文中,我們了解了 ArrayListList 以及何時使用它們。很明顯,List 在任何比較中都勝過 ArrayList,因為它更高效、更好且類型安全。 

相關(guān)文章

標(biāo)簽: CSharp  ArryList  List方法  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */