C# 中 Array和 ArrayList詳解及區(qū)別
C# 中 Array和 ArrayList詳解及區(qū)別
一、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數據類型不能缺;且要統(tǒng)一,而不能是如 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的區(qū)別]
#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是始終是連續(xù)存放的,而ArrayList的存放不一定連續(xù)。
#4 初始化大小
Array對象的初始化必須只定指定大小,且創(chuàng)建后的數組大小是固定的,
而ArrayList的大小可以動態(tài)指定,其大小可以在初始化時指定,也可以不指定,也就是說該對象的空間可以任意增加。
#5 Array不能夠隨意添加和刪除其中的項,而ArrayList可以在任意位置插入和刪除項。
五、[Array和ArrayList的相似點]
#1 都具有索引(index),即可以通過index來直接獲取和修改任意項。
#2 他們所創(chuàng)建的對象都放在托管堆中。
#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
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章
- 01-10C#通過反射獲取當前工程中所有窗體并打開的方法
 - 01-10C#實現Winform中打開網頁頁面的方法
 - 01-10C#實現由四周向中心縮小的窗體退出特效
 - 01-10Extjs4如何處理后臺json數據中日期和時間
 - 01-10C#中DataGridView常用操作實例小結
 - 01-10C#編程獲取資源文件中圖片的方法
 - 01-10asp.net中XML如何做增刪改查操作
 - 01-10C#利用反射技術實現去掉按鈕選中時的邊框效果
 - 01-10c# ArrayList的使用方法小總結
 - 01-10C#中查找Dictionary中的重復值的方法
 


閱讀排行
本欄相關
- 01-10C#通過反射獲取當前工程中所有窗體并
 - 01-10關于ASP網頁無法打開的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#實現txt定位指定行完整實例
 - 01-10WinForm實現仿視頻播放器左下角滾動新
 - 01-10C#停止線程的方法
 - 01-10C#實現清空回收站的方法
 - 01-10C#通過重寫Panel改變邊框顏色與寬度的
 - 01-10C#實現讀取注冊表監(jiān)控當前操作系統(tǒng)已
 
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-11ajax實現頁面的局部加載
 - 01-10delphi制作wav文件的方法
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 08-05織夢dedecms什么時候用欄目交叉功能?
 - 04-02jquery與jsp,用jquery
 - 01-10C#中split用法實例總結
 - 08-05dedecms(織夢)副欄目數量限制代碼修改
 - 01-10SublimeText編譯C開發(fā)環(huán)境設置
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 


