首頁  >  文章  >  後端開發  >  詳解C#中Array和ArrayList的區別

詳解C#中Array和ArrayList的區別

黄舟
黄舟原創
2017-03-28 11:44:201840瀏覽

這篇文章主要介紹了C# 中Array和ArrayList詳解及區別的相關資料,需要的朋友可以參考下

C# 中Array和ArrayList詳解及區別

一、Array 的用法

  type[]  typename=new type[size];

  或 

 type[]  typename=new type[]{ };

 Array類型的變數在宣告的同時必須進行實例化(如果初始化至少得初始化陣列的大小)

 平常我們int[],string[]...事實上就是宣告一個array數組

   如:

 string [] srt=new string[]{"a","b"};

     int[] a=new int[2]; string [] srt=new string[3];

(1):type資料型別不能缺少;且要統一,不能如int[] a =new Array[];

(2):陣列的大小size不能缺,否則c#認為是出錯的,因為陣列是一段固定長度的記憶體;

(3):右邊是一個中括號[],而不是()

註:array數組並不提供add,clear,addRange..方法,而是直接設定或取得值

如:a[0] = 0;  a[1] = 1;

#二,C# ArrayList陣列的用法:

var arrayList = new ArrayList();

      arrayList.Add(1);
      arrayList.Add(2);
      arrayList.Add(50.0); //在.net 4.0 支持。具体为什么还没有研究 
      foreach (var array in arrayList)
      {
        Console.WriteLine(array);
      }

#三, ArrayList和Array相互之間的轉換

 var arrayList = new List<int>();
      arrayList.Add(1);
      arrayList.Add(2);
      arrayList.Add(50);

      //ArrayList 数组中的值拷贝到Array中去
      int[] array1=new int[arrayList.Count];
      arrayList.CopyTo(array1); //方法一
      int[] array2 = arrayList.ToArray(); //方法二

四、[Array和ArrayList的差異]

#1. Array類型的變數在宣告的同時必須進行實例化(至少得初始化數組的大小),而ArrayList可以只是先聲明。

如: 

int[] array = new array[3];
 或 int[] array = {1,2,3};
 或 ArrayList myList = new ArrayList();

這些都是合法的,而直接使用 int[] array;是不行的。

#2. Array只能儲存同構的物件,而ArrayList可以儲存異質的物件。

同構的對像是指類型相同的對象,若宣告為int[]的陣列就只能存放整形資料,string[]只能存放字元型資料 ,但宣告為object[]的陣列除外。

而ArrayList可以存放任何不同類型的資料(因為它裡面存放的都是被裝箱了的Object型對象,實際上ArrayList內部就是使用"object[] _items;"這樣一個私有欄位來封裝物件的)

#3 在CLR託管對中的存放方式

Array是始終是連續存放的,而ArrayList的存放不一定連續。

#4 初始化大小

Array物件的初始化必須只定指定大小,且建立後的陣列大小是固定的,

而ArrayList的大小可以動態指定,其大小可以在初始化時指定,也可以不指定,也就是說該物件的空間可以任意增加。

#5 Array不能夠隨意新增和刪除其中的項,而ArrayList可以在任意位置插入和刪除項。

五、[Array和ArrayList的相似點]

#1 都具有索引(index),即可以透過index來直接取得和修改任意項目。
#2 他們所建立的物件都放在託管堆中。
#3 都能夠對自己進行枚舉(因為都實作了IEnumerable介面)。

六、[ArrayList的一些特性]

var arrayList = new List<int>(2);
 Console.WriteLine(arrayList.Capacity);
      
      int size = 2;
      for (int i = 0; i < size; i++)
      {
        arrayList.Add(i);
      }
   
      Console.WriteLine("compressed capacity:"+arrayList.Capacity);

當size為2時,輸出結果中的"current capacity"為2,
當size為3或4時,"current capacity"為4,
當size為5~8時,"current capacity"為8,
當size為9~16時,"current capacity"為16,

透過實驗可以得出一個結論,那就是每當ArrayList中的實際存在的物件數(ArrayList.Count)超過了自身的Capacity閥值,那麼該閥值會自動翻倍

 ArrayList myList = new ArrayList(5);

      for (int i = 0; i < 3; i++)
      {
        myList.Add(i);
      }
      Console.WriteLine("actual capacity:" + myList.Capacity);
      myList.TrimToSize();
      Console.WriteLine("compressed capacity:" + myList.Capacity);
      
      Console.ReadLine();

輸出:

actual capacity:5
compressed capacity:3

以上是詳解C#中Array和ArrayList的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn