java中如何給listarray賦值 array與array list有什么區(qū)別?
array與array list有什么區(qū)別?數(shù)組和數(shù)組列表的異同首先,數(shù)組和數(shù)組列表的區(qū)別# 類型的變量在聲明時(shí)必須同時(shí)實(shí)例化(至少要初始化數(shù)組的大小),而ArrayList可以先聲明即可。比如:in
array與array list有什么區(qū)別?
數(shù)組和數(shù)組列表的異同
首先,數(shù)組和數(shù)組列表的區(qū)別
# 類型的變量在聲明時(shí)必須同時(shí)實(shí)例化(至少要初始化數(shù)組的大小),而ArrayList可以先聲明即可。
比如:
int[] array新數(shù)組[3]
或int[] array {1,2,3}
或ArrayList myList new ArrayList()
這些都是合法的,但是不能直接使用int[]數(shù)組。
#只能存儲(chǔ)同構(gòu)對(duì)象,ArrayList可以存儲(chǔ)異構(gòu)對(duì)象。
同構(gòu)對(duì)象是指同一類型的對(duì)象。如果聲明為int[]的數(shù)組只能存儲(chǔ)整形數(shù)據(jù),string[]只能存儲(chǔ)字符數(shù)據(jù),聲明為object[]的數(shù)組除外。
ArrayList可以存儲(chǔ)任何不同類型的數(shù)據(jù)(因?yàn)樗薭oxed Object類型的對(duì)象,實(shí)際上ArrayList使用了類似#34object[] _items#34這樣的私有字段來封裝對(duì)象)。
如何在CLR托管對(duì)中存儲(chǔ)#3
數(shù)組總是連續(xù)存儲(chǔ)的,而ArrayList并不總是連續(xù)存儲(chǔ)的。
#4初始化大小
數(shù)組對(duì)象的初始化必須只指定大小,創(chuàng)建的數(shù)組大小是固定的,而ArrayList的大小是可以動(dòng)態(tài)指定的,它的大小可以在初始化時(shí)指定,也可以不指定,也就是說對(duì)象的空間可以任意增加。
#5陣列can t隨意添加和刪除項(xiàng),而ArrayList可以在任何地方插入和刪除項(xiàng)。
第二,數(shù)組和ArrayList的相似之處
#1有索引,即任何項(xiàng)目都可以通過索引直接獲取和修改。
#2他們創(chuàng)建的所有對(duì)象都放在托管堆中。
#3可以枚舉自己(因?yàn)槎紝?shí)現(xiàn)了IEnumerable接口)。
注意:
在C#2.0中,建議盡量使用ArrayList,即命名空間中的ListltTgt,這樣既保證了類型安全,又因?yàn)闆]有打包和解包的過程,提高了對(duì)象處理的效率。
arraylist指定初始容量還會(huì)擴(kuò)容嗎?
經(jīng)常使用ArrayList。一般來說,在使用它的時(shí)候,會(huì)這樣聲明:
List arrayList new ArrayList()
如果如上所述使用默認(rèn)構(gòu)造方法,則初始容量設(shè)置為10。當(dāng)數(shù)組列表中的元素超過10個(gè)時(shí),內(nèi)存將被重新分配??臻g將數(shù)組的大小增加到16。
通過調(diào)試我們可以看到動(dòng)態(tài)增長的數(shù)字變化:10-GT16-GT25-GT38-GT58-GT88-GT…
例如:
新的數(shù)組列表(4)
將ArrayList的默認(rèn)容量設(shè)置為4。當(dāng)ArrayList中的元素超過四個(gè)時(shí),內(nèi)存空間將被重新分配,以將數(shù)組的大小增加到7。
通過調(diào)試,我們可以看到動(dòng)態(tài)增長的數(shù)字變化:4-gt7-gt11-gt17-gt26-gt…
那么容量變化的規(guī)律是什么呢?請(qǐng)看下面的公式:
((舊容量* 3)/2) 1
一旦容量發(fā)生變化,就會(huì)帶來額外的內(nèi)存開銷和時(shí)間開銷。
因此,在容量已知的情況下,建議按以下聲明:
新數(shù)組列表(CAPACITY_SIZE)