C# 中 Array和 ArrayList详解及区别
C#中Array和ArrayList详解及区别
一、Array的用法
type[]typename=newtype[size];
或者
type[]typename=newtype[]{};
Array类型的变量在声明的同时必须进行实例化(如果初始化至少得初始化数组的大小)
平常我们int[],string[]...事实上就是声明一个array数组了
如:
string[]srt=newstring[]{"a","b"}; int[]a=newint[2];string[]srt=newstring[3];
(1):type数据类型不能缺;且要统一,而不能是如int[]a=newArray[];
(2):数组的大小size不能缺,否则c#认为是出错的,因为数组是一段固定长度的内存;
(3):右边是一个中括号[],而不是()
注:array数组并不提供add,clear,addRange..方法,而是直接设置或获取值
如:a[0]=0; a[1]=1;
二,C#ArrayList数组的用法:
vararrayList=newArrayList(); arrayList.Add(1); arrayList.Add(2); arrayList.Add(50.0);//在.net4.0支持。具体为什么还没有研究 foreach(vararrayinarrayList) { Console.WriteLine(array); }
三,ArrayList和Array相互之间的转化
vararrayList=newList<int>(); arrayList.Add(1); arrayList.Add(2); arrayList.Add(50); //ArrayList数组中的值拷贝到Array中去 int[]array1=newint[arrayList.Count]; arrayList.CopyTo(array1);//方法一 int[]array2=arrayList.ToArray();//方法二
四、[Array和ArrayList的区别]
#1.Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明。
如:
int[]array=newarray[3]; 或int[]array={1,2,3}; 或ArrayListmyList=newArrayList();
这些都是合法的,而直接使用int[]array;是不行的。
#2.Array只能存储同构的对象,而ArrayList可以存储异构的对象。
同构的对象是指类型相同的对象,若声明为int[]的数组就只能存放整形数据,string[]只能存放字符型数据,但声明为object[]的数组除外。
而ArrayList可以存放任何不同类型的数据(因为它里面存放的都是被装箱了的Object型对象,实际上ArrayList内部就是使用"object[]_items;"这样一个私有字段来封装对象的)
#3在CLR托管对中的存放方式
Array是始终是连续存放的,而ArrayList的存放不一定连续。
#4初始化大小
Array对象的初始化必须只定指定大小,且创建后的数组大小是固定的,
而ArrayList的大小可以动态指定,其大小可以在初始化时指定,也可以不指定,也就是说该对象的空间可以任意增加。
#5Array不能够随意添加和删除其中的项,而ArrayList可以在任意位置插入和删除项。
五、[Array和ArrayList的相似点]
#1都具有索引(index),即可以通过index来直接获取和修改任意项。
#2他们所创建的对象都放在托管堆中。
#3都能够对自身进行枚举(因为都实现了IEnumerable接口)。
六、[ArrayList的一些特性]
vararrayList=newList<int>(2); Console.WriteLine(arrayList.Capacity); intsize=2; for(inti=0;i<size;i++) { arrayList.Add(i); } Console.WriteLine("compressedcapacity:"+arrayList.Capacity);
当size为2时,输出结果中的"currentcapacity"为2,
当size为3或4时,"currentcapacity"为4,
当size为5~8时,"currentcapacity"为8,
当size为9~16时,"currentcapacity"为16,
通过实验可以得出一个结论,那就是每当ArrayList中的实际存在的对象数(ArrayList.Count)超过了自身的Capacity阀值,那么该阀值会自动翻倍
ArrayListmyList=newArrayList(5); for(inti=0;i<3;i++) { myList.Add(i); } Console.WriteLine("actualcapacity:"+myList.Capacity); myList.TrimToSize(); Console.WriteLine("compressedcapacity:"+myList.Capacity); Console.ReadLine();
输出:
actualcapacity:5 compressedcapacity:3
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!