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