集合

一.集合的關(guān)系體系

image.png

關(guān)系:


image.png

上述類圖中算行,實線邊框的是實現(xiàn)類,比如ArrayList胆萧,LinkedList,HashMap等俐东,折線邊框的是抽象類,比如AbstractCollection订晌,AbstractList虏辫,AbstractMap等,而點線邊框的是接口锈拨,比如Collection砌庄,Iterator,List等奕枢。

1.Iterator接口

Iterator接口娄昆,這是一個用于遍歷集合中元素的接口,主要包含hashNext(),next(),remove()三種方法缝彬。它的一個子接口LinkedIterator在它的基礎(chǔ)上又添加了三種方法萌焰,分別是add(),previous(),hasPrevious()。也就是說如果是先Iterator接口谷浅,那么在遍歷集合中元素的時候扒俯,只能往后遍歷,被遍歷后的元素不會在遍歷到一疯,通常無序集合實現(xiàn)的都是這個接口撼玄,比如HashSet,HashMap墩邀;而那些元素有序的集合掌猛,實現(xiàn)的一般都是LinkedIterator接口,實現(xiàn)這個接口的集合可以雙向遍歷眉睹,既可以通過next()訪問下一個元素荔茬,又可以通過previous()訪問前一個元素废膘,比如ArrayList。

抽象類的使用兔院。如果要自己實現(xiàn)一個集合類殖卑,去實現(xiàn)那些抽象的接口會非常麻煩,工作量很大坊萝。這個時候就可以使用抽象類孵稽,這些抽象類中給我們提供了許多現(xiàn)成的實現(xiàn),我們只需要根據(jù)自己的需求重寫一些方法或者添加一些方法就可以實現(xiàn)自己需要的集合類十偶,工作流昂大大降低菩鲜。

2.Collection (集合的最大接口)繼承關(guān)系

——List 可以存放重復(fù)的內(nèi)容
——Set  不能存放重復(fù)的內(nèi)容,所以的重復(fù)內(nèi)容靠hashCode()和equals()兩個方法區(qū)分
——Queue  隊列接口
——SortedSet  可以對集合中的數(shù)據(jù)進行排序
Collection定義了集合框架的共性功能惦积。


image.png

add方法的參數(shù)類型是Object接校。以便于接收任意類型對象。
集合中存儲的都是對象的引用(地址)狮崩。

3蛛勉、List的常用子類

特有方法。凡是可以操作角標的方法都是該體系特有的方法睦柴。


image.png

——ArrayList   線程不安全诽凌,查詢速度快
——Vector  線程安全,但速度慢坦敌,已被ArrayList替代
——LinkedList  鏈表結(jié)果侣诵,增刪速度快

4、Set接口

Set:元素是無序(存入和取出的順序不一定一致)狱窘,元素不可以重復(fù)杜顺。
—— HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表。是線程不安全的蘸炸。不同步躬络。
    HashSet是如何保證元素唯一性的呢?
    是通過元素的兩個方法幻馁,hashCode和equals來完成洗鸵。
    如果元素的HashCode值相同,才會判斷equals是否為true仗嗦。
    如果元素的hashcode值不同膘滨,不會調(diào)用equals。

注意,對于判斷元素是否存在稀拐,以及刪除等操作火邓,依賴的方法是元素的hashcode和equals方法。

——TreeSet:
    有序的存放:TreeSet  線程不安全,可以對Set集合中的元素進行排序
通過compareTo或者compare方法來保證元素的唯一性铲咨,元素以二叉樹的形式存放躲胳。

7、Map接口

Correction纤勒、Set坯苹、List接口都屬于單值的操作,而Map中的每個元素都使用key——>value的形式存儲在集合中摇天。

Map集合:該集合存儲鍵值對粹湃。一對一對往里存。而且要保證鍵的唯一性泉坐。


image.png

8为鳄、Map接口的常用子類

Map
  ——HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),允許使用 null 值和 null 鍵腕让,該集合是不同步的孤钦。
——HashTable:對HashMap個方法加鎖,線程安全纯丸,性能差偏形,已被廢棄,ConCurrentHashMap替代;
  ——TreeMap:底層是二叉樹數(shù)據(jù)結(jié)構(gòu)觉鼻。線程不同步壳猜。可以用于給map集合中的鍵進行排序滑凉。
HashMap數(shù)據(jù)結(jié)構(gòu)
在 JDK1.8 中,HashMap 是由 數(shù)組+鏈表+紅黑樹構(gòu)成(1.7版本是數(shù)組+鏈表)
當(dāng)一個值中要存儲到HashMap中的時候會根據(jù)Key的值來計算出他的hash喘帚,通過hash值來確認存放到數(shù)組中的位置畅姊,如果發(fā)生hash沖突就以鏈表的形式存儲,當(dāng)鏈表過長的話吹由,HashMap會把這個鏈表轉(zhuǎn)換成紅黑樹來存儲若未,如圖所示:

image.png

9、集合工具類

Collections:集合框架的工具類倾鲫。里面定義的都是靜態(tài)方法粗合。

Collections和Collection有什么區(qū)別?
    Collection是集合框架中的一個頂層接口乌昔,它里面定義了單列集合的共性方法隙疚。
      它有兩個常用的子接口,
      ——List:對元素都有定義索引磕道。有序的供屉。可以重復(fù)元素。
      ——Set:不可以重復(fù)元素伶丐。無序悼做。

Collections是集合框架中的一個工具類。該類中的方法都是靜態(tài)的哗魂。
      提供的方法中有可以對list集合進行排序肛走,二分查找等方法。
      通常常用的集合都是線程不安全的录别。因為要提高效率朽色。
      如果多線程操作這些集合時,可以通過該工具類中的同步方法庶灿,將線程不安全的集合纵搁,轉(zhuǎn)換成安全的。

10.比較

image.png

11.總結(jié):

List:add/remove/get/set往踢。

1腾誉,ArrayList:其實就是數(shù)組,容量一大峻呕,頻繁增刪就是噩夢利职,適合隨機查找;

2瘦癌,LinkedList:增加了push/[pop|remove|pull]猪贪,其實都是removeFirst;

3讯私,Vector:歷史遺留產(chǎn)物热押,同步版的ArrayList,代碼和ArrayList太像斤寇;

4桶癣,Stack:繼承自Vector。Java里其實沒有純粹的Stack娘锁,可以自己實現(xiàn)牙寞,用組合的方式,封裝一下LinkedList即可莫秆;

5间雀,Queue:本來是單獨的一類,不過在SUN的JDK里就是用LinkedList來提供這個功能的镊屎,主要方法是offer/pull/peek惹挟,因此歸到這里呢。

Set:add/remove杯道》嘶停可以用迭代器或者轉(zhuǎn)換成list责蝠。

1,HashSet:內(nèi)部采用HashMap實現(xiàn)的萎庭;

2霜医,LinkedHashSet:采用LinkedHashMap實現(xiàn);

3驳规,TreeSet:TreeMap肴敛。

Map:put/get/remove。

1吗购,HashMap/HashTable:散列表医男,和ArrayList一樣采用數(shù)組實現(xiàn),超過初始容量會對性能有損耗捻勉;

2镀梭,LinkedHashMap:繼承自HashMap,但通過重寫嵌套類HashMap.Entry實現(xiàn)了鏈表結(jié)構(gòu)踱启,同樣有容量的問題报账;

3,Properties:是繼承的HashTable埠偿。

順便說一下Arrays.asList透罢,這個方法的實現(xiàn)依賴一個嵌套類,這個嵌套類也叫ArrayList冠蒋!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羽圃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抖剿,更是在濱河造成了極大的恐慌朽寞,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斩郎,死亡現(xiàn)場離奇詭異愁憔,居然都是意外死亡,警方通過查閱死者的電腦和手機孽拷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來半抱,“玉大人脓恕,你說我怎么就攤上這事×蓿” “怎么了炼幔?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長史简。 經(jīng)常有香客問我乃秀,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任跺讯,我火速辦了婚禮枢贿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刀脏。我一直安慰自己局荚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布愈污。 她就那樣靜靜地躺著耀态,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暂雹。 梳的紋絲不亂的頭發(fā)上首装,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音杭跪,去河邊找鬼仙逻。 笑死,一個胖子當(dāng)著我的面吹牛揍魂,可吹牛的內(nèi)容都是我干的桨醋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼现斋,長吁一口氣:“原來是場噩夢啊……” “哼喜最!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庄蹋,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤瞬内,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后限书,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虫蝶,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年倦西,在試婚紗的時候發(fā)現(xiàn)自己被綠了能真。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扰柠,死狀恐怖粉铐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卤档,我是刑警寧澤蝙泼,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站劝枣,受9級特大地震影響汤踏,放射性物質(zhì)發(fā)生泄漏织鲸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一溪胶、第九天 我趴在偏房一處隱蔽的房頂上張望搂擦。 院中可真熱鬧,春花似錦载荔、人聲如沸盾饮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丘损。三九已至,卻和暖如春工扎,著一層夾襖步出監(jiān)牢的瞬間徘钥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工肢娘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呈础,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓橱健,卻偏偏與公主長得像而钞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拘荡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容