array與array?
Array和ArrayList的異同點(diǎn)
一、Array和ArrayList的區(qū)別
#1. Array類(lèi)型的變量在聲明的同時(shí)必須進(jìn)行實(shí)例化(至少得初始化數(shù)組的大小),而ArrayList可以只是先聲明。
如:
int[] array = new array[3];
或 int[] array = {1,2,3};
或 ArrayList myList = new ArrayList();
這些都是合法的,而直接使用 int[] array;是不行的。
#2. Array只能存儲(chǔ)同構(gòu)的對(duì)象,而ArrayList可以存儲(chǔ)異構(gòu)的對(duì)象。
同構(gòu)的對(duì)象是指類(lèi)型相同的對(duì)象,若聲明為int[]的數(shù)組就只能存放整形數(shù)據(jù),string[]只能存放字符型數(shù)據(jù),但聲明為object[]的數(shù)組除外。
而ArrayList可以存放任何不同類(lèi)型的數(shù)據(jù)(因?yàn)樗锩娲娣诺亩际潜谎b箱了的Object型對(duì)象,實(shí)際上ArrayList內(nèi)部就是使用"object[] _items;"這樣一個(gè)私有字段來(lái)封裝對(duì)象的)
#3 在CLR托管對(duì)中的存放方式
Array是始終是連續(xù)存放的,而ArrayList的存放不一定連續(xù)。
#4 初始化大小
Array對(duì)象的初始化必須只定指定大小,且創(chuàng)建后的數(shù)組大小是固定的,而ArrayList的大小可以動(dòng)態(tài)指定,其大小可以在初始化時(shí)指定,也可以不指定,也就是說(shuō)該對(duì)象的空間可以任意增加。
#5 Array不能夠隨意添加和刪除其中的項(xiàng),而ArrayList可以在任意位置插入和刪除項(xiàng)。
二、Array和ArrayList的相似點(diǎn)
#1 都具有索引(index),即可以通過(guò)index來(lái)直接獲取和修改任意項(xiàng)。
#2 他們所創(chuàng)建的對(duì)象都放在托管堆中。
#3 都能夠?qū)ψ陨磉M(jìn)行枚舉(因?yàn)槎紝?shí)現(xiàn)了IEnumerable接口)。
注:
在C#2.0中,建議大家盡量使用范型版的ArrayList,即System.Collection.Generics命名空間下的List<T>,這樣不但保證了類(lèi)型安全,而且由于沒(méi)有了裝箱和拆箱的過(guò)程,從而提高了對(duì)象處理的效率。