集合框架分為兩個(gè)家族:Collection(一組對(duì)象)和Map(一組映射關(guān)系、一組鍵值對(duì))
①Collection:
List:是Collection的子接口勾栗。
List系列的集合:有序的惨篱、可重復(fù)的
List系列的常用集合:ArrayList、Vector围俘、LinkedList砸讳、Stack(Vector的子類(lèi))
Set系列的集合:不可重復(fù)的
Set系列的集合琢融,有有序的也有無(wú)序的。
HashSet無(wú)序的簿寂,底層是HashMap實(shí)現(xiàn)漾抬。
TreeSet按照元素的大小順序遍歷,底層是TreeMap實(shí)現(xiàn)常遂。
LinkedHashSet按照元素的添加順序遍歷纳令,底層是LinkedHashMap。
②Map:
Map: 用來(lái)存儲(chǔ)鍵值對(duì)克胳,映射關(guān)系的集合平绩。所有的Map的key都不能重復(fù)。
鍵值對(duì)漠另、映射關(guān)系的類(lèi)型:Entry類(lèi)型捏雌。
Entry接口是Map接口的內(nèi)部接口。所有的Map的鍵值對(duì)的類(lèi)型都實(shí)現(xiàn)了這個(gè)接口笆搓。
HashMap中的映射關(guān)系性湿,是有一個(gè)內(nèi)部類(lèi)來(lái)實(shí)現(xiàn)Entry的接口,JDK1.7是一個(gè)叫做Entry的內(nèi)部類(lèi)實(shí)現(xiàn)Entry接口满败。
JDK1.8是一個(gè)叫做Node的內(nèi)部類(lèi)實(shí)現(xiàn)Entry接口肤频。
TreeMap中的映射關(guān)系,是有一個(gè)內(nèi)部類(lèi)Entry來(lái)實(shí)現(xiàn)Entry的接口葫录。
Map的實(shí)現(xiàn)類(lèi):
(1)HashMap:
?????? 依據(jù)key的hashCode()和equals()來(lái)保證key是否重復(fù)着裹。
?????? key如果重復(fù),新的value會(huì)替換舊的value米同。
hashCode()決定了映射關(guān)系在table數(shù)組中的存儲(chǔ)的位置骇扇,index = hash(key.hashCode()) & table.length-1
?????? HashMap的底層實(shí)現(xiàn):JDK1.7是數(shù)組+鏈表;JDK1.8是數(shù)組+鏈表/紅黑樹(shù)
(2)TreeMap
?????? 依據(jù)key的大小來(lái)保證key是否重復(fù)面粮。key如果重復(fù)少孝,新的value會(huì)替換舊的value。
(3)LinkedHashMap
依據(jù)key的hashCode()和equals()來(lái)保證key是否重復(fù)熬苍。key如果重復(fù)稍走,新的value會(huì)替換舊的value。
?????? LinkedHashMap是HashMap的子類(lèi)柴底,比HashMap多了添加順序
ArrayList 和LinkedList的區(qū)別
1.? ? ?ArrayList:動(dòng)態(tài)數(shù)組婿脸,底層物理結(jié)構(gòu)是數(shù)組
優(yōu)點(diǎn):根據(jù)【下標(biāo)】訪(fǎng)問(wèn)的速度很快
缺點(diǎn):需要開(kāi)辟連續(xù)的存儲(chǔ)空間,而且需要擴(kuò)容(添加)柄驻,移動(dòng)元素(刪除)等操作
2.? ? ?LinkedList:底層物理結(jié)構(gòu)是雙向鏈表
優(yōu)點(diǎn):在增加狐树、刪除元素時(shí),不需要移動(dòng)元素鸿脓,只需要修改前后元素的引用關(guān)系抑钟。
缺點(diǎn):我們查找元素時(shí)涯曲,只能從first或last開(kāi)始查找