C# 中 Array和 ArrayList詳解及區(qū)別
C# 中 Array和 ArrayList詳解及區(qū)別
一、Array 的用法
type[] typename=new type[size];
或者
type[] typename=new type[]{ };
Array類型的變量在聲明的同時必須進行實例化(如果初始化至少得初始化數(shù)組的大小)
平常我們int[],string[]...事實上就是聲明一個array數(shù)組了
如:
string [] srt=new string[]{"a","b"}; int[] a=new int[2]; string [] srt=new string[3];
(1):type數(shù)據(jù)類型不能缺;且要統(tǒng)一,而不能是如 int[] a=new Array[];
(2):數(shù)組的大小size不能缺,否則c#認為是出錯的,因為數(shù)組是一段固定長度的內(nèi)存;
(3):右邊是一個中括號[],而不是()
注:array數(shù)組并不提供add,clear,addRange..方法,而是直接設(shè)置或獲取值
如:a[0] = 0; a[1] = 1;
二,C# ArrayList數(shù)組的用法:
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相互之間的轉(zhuǎn)化
var arrayList = new List<int>(); arrayList.Add(1); arrayList.Add(2); arrayList.Add(50); //ArrayList 數(shù)組中的值拷貝到Array中去 int[] array1=new int[arrayList.Count]; arrayList.CopyTo(array1); //方法一 int[] array2 = arrayList.ToArray(); //方法二
四、[Array和ArrayList的區(qū)別]
#1. Array類型的變量在聲明的同時必須進行實例化(至少得初始化數(shù)組的大小),而ArrayList可以只是先聲明。
如:
int[] array = new array[3]; 或 int[] array = {1,2,3}; 或 ArrayList myList = new ArrayList();
這些都是合法的,而直接使用 int[] array;是不行的。
#2. Array只能存儲同構(gòu)的對象,而ArrayList可以存儲異構(gòu)的對象。
同構(gòu)的對象是指類型相同的對象,若聲明為int[]的數(shù)組就只能存放整形數(shù)據(jù),string[]只能存放字符型數(shù)據(jù),但聲明為object[]的數(shù)組除外。
而ArrayList可以存放任何不同類型的數(shù)據(jù)(因為它里面存放的都是被裝箱了的Object型對象,實際上ArrayList內(nèi)部就是使用"object[] _items;"這樣一個私有字段來封裝對象的)
#3 在CLR托管對中的存放方式
Array是始終是連續(xù)存放的,而ArrayList的存放不一定連續(xù)。
#4 初始化大小
Array對象的初始化必須只定指定大小,且創(chuàng)建后的數(shù)組大小是固定的,
而ArrayList的大小可以動態(tài)指定,其大小可以在初始化時指定,也可以不指定,也就是說該對象的空間可以任意增加。
#5 Array不能夠隨意添加和刪除其中的項,而ArrayList可以在任意位置插入和刪除項。
五、[Array和ArrayList的相似點]
#1 都具有索引(index),即可以通過index來直接獲取和修改任意項。
#2 他們所創(chuàng)建的對象都放在托管堆中。
#3 都能夠?qū)ψ陨磉M行枚舉(因為都實現(xiàn)了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);
當(dāng)size為2時,輸出結(jié)果中的"current capacity"為2,
當(dāng)size為3或4時,"current capacity"為4,
當(dāng)size為5~8時,"current capacity"為8,
當(dāng)size為9~16時,"current capacity"為16,
通過實驗可以得出一個結(jié)論,那就是每當(dāng)ArrayList中的實際存在的對象數(shù)(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
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 輕松學(xué)習(xí)C#的ArrayList類
- 詳解c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉(zhuǎn)換
- C# ArrayList、HashSet、HashTable、List、Dictionary的區(qū)別詳解
- C#入門教程之集合ArrayList用法詳解
- C#中數(shù)組、ArrayList、List、Dictionary的用法與區(qū)別淺析(存取數(shù)據(jù))
- C#中數(shù)組、ArrayList和List三者的區(qū)別詳解
- C#中數(shù)組Array,ArrayList,泛型List詳細對比
- C#中ArrayList?類的使用詳解
相關(guān)文章
c# 9.0新特性nint和Pattern matching的使用方法
這篇文章主要介紹了c# 9.0新特性nint和Pattern matching的使用方法,文中講解非常細致,幫助你更好的學(xué)習(xí)c# 9.0,有需求的朋友可以參考下2020-06-06在Framework 4.0中:找出新增的方法與新增的類(二)
為什么動態(tài)加載程序集無法找出Framework 4.0 和Framwork2.0 新增的方法和類2013-05-05C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中
這篇文章介紹了C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04