更新時(shí)間:2020-08-06 16:05:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3002次
1、數(shù)組:Java arrays的元素個(gè)數(shù)不能下標(biāo)越界,從很大程度上保證了Java程序的安全性,而其他一些語(yǔ)言出現(xiàn)這一問(wèn)題時(shí)常導(dǎo)致災(zāi)難性的后果。
Array可以存放Object和基本數(shù)據(jù)類(lèi)型,但創(chuàng)建時(shí)必須指定數(shù)組的大小,并不能再改變。值得注意的是:當(dāng)Array中的某一元素存放的是Objrct reference時(shí),Java不會(huì)調(diào)用默認(rèn)的構(gòu)造函數(shù),而是將其初值設(shè)為null,當(dāng)然這跟Java對(duì)各類(lèi)型數(shù)據(jù)賦默認(rèn)值的規(guī)則是一樣的,對(duì)基本數(shù)據(jù)類(lèi)型同樣適用。
2、Vector:對(duì)比于Array,當(dāng)更多的元素被加入進(jìn)來(lái)以至超出其容量時(shí),Vector的size會(huì)動(dòng)態(tài)增長(zhǎng),而Array容量是定死的。同時(shí),Vector在刪除一些元素后,其所有下標(biāo)大于被刪除元素的元素都依次前移,并獲得新下標(biāo)比原來(lái)的小了)。注意:當(dāng)調(diào)用Vector的size()方法時(shí),返回Vector中實(shí)際元素的個(gè)數(shù)。
Vector內(nèi)部實(shí)際是以Array實(shí)現(xiàn)的,也通過(guò)元素的整數(shù)索引來(lái)訪問(wèn)元素,但它只能存放java.lang.Object對(duì)象,不能用于存放基本類(lèi)型數(shù)據(jù),比如要存放一個(gè)整數(shù)10,得用new Integer(10)構(gòu)造出一個(gè)Integer包裝類(lèi)對(duì)象再放進(jìn)去。當(dāng)Vector中的元素個(gè)數(shù)發(fā)生變化時(shí),其內(nèi)部的Array必須重新分配并進(jìn)行拷貝,因此這是一點(diǎn)值得考慮的效率問(wèn)題。
Vetor同時(shí)也實(shí)現(xiàn)了List接口,所以也可以算作Colletion了,只是它還特殊在:Vector is synchronized。即Vetor對(duì)象自身實(shí)現(xiàn)了同步機(jī)制。
3、ArrayList:實(shí)現(xiàn)了List接口,功能與Vetor一樣,只是沒(méi)有同步機(jī)制,當(dāng)然元素的訪問(wèn)方式為從List中繼承而來(lái),可存放任何類(lèi)型的對(duì)象。
Hashtable和HashMap的區(qū)別:
1.Hashtable是Dictionary的子類(lèi),HashMap是Map接口的一個(gè)實(shí)現(xiàn)類(lèi);
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的。即是說(shuō),在多線程應(yīng)用程序中,不用專(zhuān)門(mén)的操作就安全地可以使用Hashtable了;而對(duì)于HashMap,則需要額外的同步機(jī)制。但HashMap的同步問(wèn)題可通過(guò)Collections的一個(gè)靜態(tài)方法得到解決:
Map Collections.synchronizedMap(Map m)
這個(gè)方法返回一個(gè)同步的Map,這個(gè)Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環(huán)境中也是安全的。
3.在HashMap中,null可以作為鍵,這樣的鍵只有一個(gè);可以有一個(gè)或多個(gè)鍵所對(duì)應(yīng)的值為null。當(dāng)get()方法返回null值時(shí),即可以表示HashMap中沒(méi)有該鍵,也可以表示該鍵所對(duì)應(yīng)的值為null。因此,在HashMap中不能由get()方法來(lái)判斷HashMap中是否存在某個(gè)鍵,而應(yīng)該用containsKey()方法來(lái)判斷。

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java中collection分類(lèi)的幾種比較”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)