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

贊助商

分類目錄

贊助商

最新文章

搜索

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

作者:admin    時(shí)間:2023-5-13 11:20:21    瀏覽:

在本文中,我們將看到兩種存儲(chǔ)類型:ArrayListList,我將從5個(gè)方面對(duì)它們進(jìn)行比較,并最后提出使用建議。

概述

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

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

C#中的ArrayList

ArrayList類用于在 C# 中聲明一個(gè) ArrayListArrayList在其中存儲(chǔ)對(duì)象引用。這意味著 ArrayList可以在其中存儲(chǔ)多種數(shù)據(jù)類型的數(shù)據(jù),如整數(shù)、字符串、浮點(diǎn)數(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類的實(shí)例:array1,并在其中存儲(chǔ)了不同數(shù)據(jù)類型的不同值。

C#中的List

通用列表用于保存 C# 中一種特定數(shù)據(jù)類型的數(shù)據(jù)。List類用于在 C# 中聲明特定數(shù)據(jù)類型的列表。我們需要在聲明時(shí)指定列表的數(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類的實(shí)例:list1,它包含整數(shù)數(shù)據(jù)類型和存儲(chǔ)的整數(shù)值。

比較 ArrayList 和 List

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

集合性質(zhì)

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

讓我們看一個(gè) ArrayList 存儲(chǔ)不同對(duì)象類型的例子:

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

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

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

容易出錯(cuò)

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

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

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

裝箱/拆箱需求

我們?cè)谑褂?ArrayList 時(shí),經(jīng)常需要我們對(duì)正在訪問(wèn)的對(duì)象進(jìn)行裝箱或拆箱,以避免出現(xiàn)任何錯(cuò)誤。但是對(duì)于 List,情況絕非如此。

讓我們看看如何:

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

輸出

Sum is 6

正如我們?cè)?ArrayList 中看到的那樣,我們必須使用Convert.ToInt32()轉(zhuǎn)換"3"為3,才能使計(jì)算正常進(jìn)行并避免運(yùn)行時(shí)錯(cuò)誤。

但對(duì)于 List,我們不需要這樣做:

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

輸出仍然是一樣的:

Sum is 6

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

內(nèi)存管理

通常,ListArrayList 更節(jié)省內(nèi)存,因?yàn)樗槐貫榧现械拿總€(gè)元素存儲(chǔ)對(duì)象引用。相反,它將元素直接存儲(chǔ)在數(shù)組中。而 ArrayList 將元素存儲(chǔ)在內(nèi)部數(shù)組中,并且當(dāng)我們?cè)黾訑?shù)組大小時(shí)需要分配額外的內(nèi)存。

性能效率

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

使用偏好

正如我們現(xiàn)在所知,ArrayList 可以靈活地存儲(chǔ)任何數(shù)據(jù)類型的對(duì)象,因此如果類型安全確實(shí)不是問(wèn)題,我們可以使用它。此外,如果我們正在開(kāi)發(fā)的應(yīng)用程序的目標(biāo)是 .NET Framework 版本.NET 2.0 或更低版本,我們可以繼續(xù)使用 ArrayList。但是,如果我們正在使用等于或高于 .NET 3.0 的框架,我們總是可以更喜歡 List 而不是 ArrayList,原因有很多,我們?cè)谇懊娴牟糠忠呀?jīng)看到了。 

使用 ArrayList 和 List 時(shí)的建議

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

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

總結(jié)

在本文中,我們了解了 ArrayListList 以及何時(shí)使用它們。很明顯,List 在任何比較中都勝過(guò) ArrayList,因?yàn)樗咝А⒏们翌愋桶踩?nbsp;

相關(guān)文章

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