更新時(shí)間:2021-05-10 16:03:26 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽960次
在使用Java的時(shí)候,我們都會(huì)遇到使用集合(Collection)的時(shí)候,但是Java API提供了多種集合的實(shí)現(xiàn),總的說(shuō)來(lái),Java API中所用的集合類,都是實(shí)現(xiàn)了Collection接口,他的一個(gè)類繼承結(jié)構(gòu)如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Vector:基于Array的List,其實(shí)就是封裝了Array所不具備的一些功能方便我們使用,它不可能不受Array的限制。性能也就不可能超越Array。所以,在可能的情況下,我們要多運(yùn)用Array。另外很重要的一點(diǎn)就是Vector:sychronized”的,這個(gè)也是Vector和ArrayList的唯一的區(qū)別。
ArrayList:同Vector一樣是一個(gè)基于Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優(yōu)越一些,但是當(dāng)運(yùn)行到多線程環(huán)境中時(shí),可需要自己在管理線程的同步問(wèn)題。
LinkedList:LinkedList不同于前面兩種List,它不是基于Array的,所以不受Array性能的限制。它每一個(gè)節(jié)點(diǎn)(Node)都包含兩方面的內(nèi)容:1.節(jié)點(diǎn)本身的數(shù)據(jù)(data);2.下一個(gè)節(jié)點(diǎn)的信息(nextNode)。所以當(dāng)對(duì)LinkedList做添加,刪除動(dòng)作的時(shí)候就不用像基于Array的List一樣,必須進(jìn)行大量的數(shù)據(jù)移動(dòng)。只要更改nextNode的相關(guān)信息就可以實(shí)現(xiàn)了。這就是LinkedList的優(yōu)勢(shì)。
List總結(jié):
1.所有的List中只能容納單個(gè)不同類型的對(duì)象組成的表,而不是Key-Value鍵值對(duì)。例如:[tom,1,c];
2.所有的List中可以有相同的元素,例如Vector中可以有[tom,koo,too,koo];
3.所有的List中可以有null元素,例如[tom,null,1];
4.基于Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
HashSet:雖然Set同List都實(shí)現(xiàn)了Collection接口,但是他們的實(shí)現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎(chǔ)。但是Set則是在HashMap的基礎(chǔ)上來(lái)實(shí)現(xiàn)的,這個(gè)就是Set和List的根本區(qū)別。HashSet的存儲(chǔ)方式是把HashMap中的Key作為Set的對(duì)應(yīng)存儲(chǔ)項(xiàng)。看看HashSet的add(Object obj)方法的實(shí)現(xiàn)就可以一目了然了。
public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}
這個(gè)也是為什么在Set中不能像在List中一樣有重復(fù)的項(xiàng)的根本原因,因?yàn)镠ashMap的key是不能有重復(fù)的。
LinkedHashSet:HashSet的一個(gè)子類,一個(gè)鏈表。
TreeSet:SortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過(guò)SortedMap來(lái)實(shí)現(xiàn)的。
Set總結(jié):
1.Set實(shí)現(xiàn)的基礎(chǔ)是Map(HashMap);
2.Set中的元素是不能重復(fù)的,如果使用add(Object obj)方法添加已經(jīng)存在的對(duì)象,則會(huì)覆蓋前面的對(duì)象
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java中的集合你都詳細(xì)了解了嗎”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743