电竞比分网-中国电竞赛事及体育赛事平台

分享

Array、List和ArrayList的區(qū)別與

 生命隨時(shí)光流逝 2019-09-01
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

Array

定義: 

public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable


    數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,所以它的索引速度是非常的快,而且賦值與修改元素也很簡單

 

  1. string[] s = new string[3];
  2. //賦值
  3. s [0] = "a";
  4. s [1] = "b";
  5. s [2] = "c";
  6. //修改
  7. s [0] = "a1";

數(shù)組在倆數(shù)據(jù)中插入數(shù)據(jù)是很麻煩的,還有我們?cè)诼暶鲾?shù)組的時(shí)候,必須同時(shí)指明數(shù)組的長度,數(shù)組的長度過長,會(huì)造成內(nèi)存浪費(fèi),數(shù)組和長度過短,會(huì)造成數(shù)據(jù)溢出的錯(cuò)誤。

 

ArrayList

 

      ArrayList是.Net Framework提供的用于數(shù)據(jù)存儲(chǔ)和檢索的專用類,它是命名空間System.Collections下的一部分。它的大小是按照其中存儲(chǔ)的數(shù)據(jù)來動(dòng)態(tài)擴(kuò)充與收縮的。所以,我們?cè)诼暶鰽rrayList對(duì)象時(shí)并不需要指定它的長度。ArrayList繼承了IList接口,所以它可以很方便的進(jìn)行數(shù)據(jù)的添加,插入和移除.比如:

 

  1. ArrayList list = new ArrayList ();
  2. //新增數(shù)據(jù)
  3. list.Add ("abc");
  4. list.Add (123);
  5. //修改數(shù)據(jù)
  6. list [2] = 345;
  7. //移除數(shù)據(jù)
  8. list.RemoveAt (0);
  9. //插入數(shù)據(jù)
  10. list.Insert (0, "hello world");

 

    ArrayList存在不安全類型與裝箱拆箱的缺點(diǎn):

    在list中,我們不僅插入了字符串"abc",而且又插入了數(shù)字123。這樣在ArrayList中插入不同類型的數(shù)據(jù)是允許的。因?yàn)锳rrayList會(huì)把所有插入其中的數(shù)據(jù)都當(dāng)作為object類型來處理。這樣,在我們使用ArrayList中的數(shù)據(jù)來處理問題的時(shí)候,很可能會(huì)報(bào)類型不匹配的錯(cuò)誤,也就是說ArrayList不是類型安全的。既使我們保證在插入數(shù)據(jù)的時(shí)候都很小心,都有插入了同一類型的數(shù)據(jù),但在使用的時(shí)候,我們也需要將它們轉(zhuǎn)化為對(duì)應(yīng)的原類型來處理。這就存在了裝箱與拆箱的操作,會(huì)帶來很大的性能損耗。

List

 

    List類是ArrayList類的泛型等效類(ArrayList繼承了List接口)。它的大部分用法都與ArrayList相似,因?yàn)長ist類也繼承了IList接口。最關(guān)鍵的區(qū)別在于,在聲明List集合時(shí),我們同時(shí)需要為其聲明List集合內(nèi)數(shù)據(jù)的對(duì)象類型。

 

  1. List<int> list = new List<int>();
  2. //新增數(shù)據(jù)
  3. list.Add(123);
  4. //修改數(shù)據(jù)
  5. list[0] = 345;
  6. //移除數(shù)據(jù)
  7. list.RemoveAt(0);

拓展

		ArrayList list1 = new ArrayList ();

 

    這句創(chuàng)建了一個(gè)ArrayList的對(duì)象后把上溯到了List。此時(shí)list是一個(gè)List對(duì)象了,有些ArrayList有但是List沒有的屬性和方法,它就不能再用了。而ArrayList list=new ArrayList();創(chuàng)建一對(duì)象則保留了ArrayList的所有屬性。

    問題就在于List有多個(gè)實(shí)現(xiàn)類,如LinkedList或者Vector等等,現(xiàn)在你用的是ArrayList,也許哪一天你需要換成其它的實(shí)現(xiàn)類呢?,這時(shí)你只要改變這一行就行了:List list = new LinkedList(); 其它使用了list地方的代碼根本不需要改動(dòng)。假設(shè)你開始用 ArrayList list = new ArrayList(), 這下你有的改了,特別是如果你使用了 ArrayList特有的方法和屬性。如果沒有特別需求的話,最好使用List list = new LinkedList(); 便于程序代碼的重構(gòu). 這就是面向接口編程的好處。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多