集合

集合類之間的繼承關(guān)系:

Set集合

Set集合不允許包含相同的元素鹅龄,如果試圖把兩個(gè)相同的元素加入同一個(gè)Set集合中,則添加操作失敗,add()方法返回false署浩,且新元素不會(huì)被加入。

一扫尺、HashSet類

HashSet是Set接口的典型實(shí)現(xiàn)筋栋,實(shí)現(xiàn)了Set接口中的所有方法,并沒有添加額外的方法正驻,大多數(shù)時(shí)候使用Set集合時(shí)就是使用這個(gè)實(shí)現(xiàn)類弊攘。HashSet按Hash算法來存儲(chǔ)集合中的元素。因此具有很好的存取和查找性能姑曙。

HashSet特點(diǎn):

1.不能保證元素的排列順序襟交,順序可能與添加順序不同,順序也有可能發(fā)生變化伤靠。

2.HashSet不是同步的捣域,如果多個(gè)線程同時(shí)訪問一個(gè)HashSet,則必須通過代碼來保證其同步醋界。

3.集合元素值可以是null竟宋。

除此之外,HashSet判斷兩個(gè)元素是否相等的標(biāo)準(zhǔn)也是其一大特點(diǎn)形纺。HashSet集合判斷兩個(gè)元素相等的標(biāo)準(zhǔn)是兩個(gè)對(duì)象通過equals()方法比較相等丘侠,并且兩個(gè)對(duì)象的hashCode()方法返回值也相等。

LinkedHashSet類

LinkedHashSet是HashSet對(duì)的子類逐样,也是根據(jù)元素的hashCode值來決定元素的存儲(chǔ)位置蜗字,同時(shí)使用鏈表維護(hù)元素的次序,使得元素是以插入的順序來保存的脂新。當(dāng)遍歷LinkedHashSet集合里的元素時(shí)挪捕,LinkedHashSet將會(huì)按元素的添加順序來訪問集合里的元素。但是由于要維護(hù)元素的插入順序争便,在性能上略低與HashSet级零,但在迭代訪問Set里的全部元素時(shí)有很好的性能。

注意:LinkedHashSet依然不允許元素重復(fù)滞乙,判斷重復(fù)標(biāo)準(zhǔn)與HashSet一致奏纪。

補(bǔ)充:HashSet的實(shí)質(zhì)是一個(gè)HashMap。HashSet的所有集合元素斩启,構(gòu)成了HashMap的key序调,其value為一個(gè)靜態(tài)Object對(duì)象。因此HashSet的所有性質(zhì)兔簇,HashMap的key所構(gòu)成的集合都具備发绢。

二硬耍、TreeSet類

TreeSet簡介

TreeSet中所謂的有序,不同于之前所講的插入順序边酒,而是通過集合中元素屬性進(jìn)行排序方式來實(shí)現(xiàn)的经柴。

比較器Comparator:

List集合

一、ArrayList

ArrayList和Vector作為List類的兩個(gè)典型實(shí)現(xiàn)墩朦,完全支持之前介紹的List接口的全部功能口锭。

ArrayList和Vector類都是基于數(shù)組實(shí)現(xiàn)的List類,所以ArrayList和Vector類封裝了一個(gè)動(dòng)態(tài)的介杆、允許再分配的Object[]數(shù)組鹃操。ArrayList或Vector對(duì)象使用initalCapacity參數(shù)來設(shè)置該數(shù)組的長度,當(dāng)向ArrayList或Vector中添加元素超過了該數(shù)組的長度時(shí)春哨,它們的initalCapacity會(huì)自動(dòng)增加荆隘。

ArrayList和Vector的區(qū)別:

1.ArrayList是線程不安全的,Vector是線程安全的赴背。

2.Vector的性能比ArrayList差椰拒。

二、LinkedList

LinkedList類是List接口的實(shí)現(xiàn)類——這意味著它是一個(gè)List集合凰荚,可以根據(jù)索引來隨機(jī)訪問集合中的元素燃观。除此之外,LinkedList還實(shí)現(xiàn)了Deque接口便瑟,可以被當(dāng)作成雙端隊(duì)列來使用缆毁,因此既可以被當(dāng)成“棧"來使用,也可以當(dāng)成隊(duì)列來使用到涂。

LinkedList的實(shí)現(xiàn)機(jī)制與ArrayList完全不同脊框。ArrayList內(nèi)部是以數(shù)組的形式來保存集合中的元素的,因此隨機(jī)訪問集合元素時(shí)有較好的性能践啄;而LinkedList內(nèi)部以鏈表的形式來保存集合中的元素浇雹,因此隨機(jī)訪問集合元素時(shí)性能較差,但在插入屿讽、刪除元素時(shí)性能比較出色昭灵。

!ArrayList與LinkedList性能對(duì)比伐谈!

ArrayList 是一個(gè)數(shù)組隊(duì)列烂完,相當(dāng)于動(dòng)態(tài)數(shù)組。它由數(shù)組實(shí)現(xiàn)衩婚,隨機(jī)訪問效率高窜护,隨機(jī)插入效斑、隨機(jī)刪除效率低非春。ArrayList應(yīng)使用隨機(jī)訪問(即,通過索引序號(hào)訪問)遍歷集合元素。

LinkedList 是一個(gè)雙向鏈表奇昙。它也可以被當(dāng)作堆棧护侮、隊(duì)列或雙端隊(duì)列進(jìn)行操作。LinkedList隨機(jī)訪問效率低储耐,但隨機(jī)插入羊初、隨機(jī)刪除效率高。LinkedList應(yīng)使用采用逐個(gè)遍歷的方式遍歷集合元素什湘。

(01) 對(duì)于需要快速插入长赞,刪除元素,應(yīng)該使用LinkedList闽撤。

(02) 對(duì)于需要快速隨機(jī)訪問元素得哆,應(yīng)該使用ArrayList。

(03) 對(duì)于“單線程環(huán)境” 或者 “多線程環(huán)境哟旗,但List僅僅只會(huì)被單個(gè)線程操作”贩据,此時(shí)應(yīng)該使用非同步的類(如ArrayList)。對(duì)于“多線程環(huán)境闸餐,且List可能同時(shí)被多個(gè)線程操作”饱亮,此時(shí),應(yīng)該使用同步的類(如Vector)舍沙。


HashMap與Hashtable的區(qū)別

1.Hashtable是一個(gè)線程安全的Map實(shí)現(xiàn)近上,但HashMap是線程不安全的實(shí)現(xiàn),所以HashMap比Hashtable的性能好一些拂铡;但如果有多個(gè)線程訪問同一個(gè)Map對(duì)象時(shí)戈锻,是盜用Hashtable實(shí)現(xiàn)類會(huì)更好。

2.Hashtable不允許使用null作為key和value和媳,如果試圖把null值放進(jìn)Hashtable中格遭,將會(huì)引發(fā)NullPointerException異常;但是HashMap可以使用null作為key或value留瞳。

TreeMap

TreeMap是SortedMap接口的實(shí)現(xiàn)類拒迅。TreeMap 是一個(gè)有序的key-value集合,它是通過紅黑樹實(shí)現(xiàn)的她倘。

Map實(shí)現(xiàn)類的性能分析及適用場景

HashMap與Hashtable實(shí)現(xiàn)機(jī)制幾乎一樣璧微,但是HashMap比Hashtable性能更好些。

LinkedHashMap比HashMap慢一點(diǎn)硬梁,因?yàn)樗枰S護(hù)一個(gè)雙向鏈表前硫。

TreeMap比HashMap與Hashtable慢(尤其在插入、刪除key-value時(shí)更慢)荧止,因?yàn)門reeMap底層采用紅黑樹來管理鍵值對(duì)屹电。

適用場景:

一般的應(yīng)用場景阶剑,盡可能多考慮使用HashMap,因?yàn)槠錇榭焖俨樵冊O(shè)計(jì)的危号。

如果需要特定的排序時(shí)牧愁,考慮使用TreeMap。

如果僅僅需要插入的順序時(shí)外莲,考慮使用LinkedHashMap猪半。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偷线,隨后出現(xiàn)的幾起案子磨确,更是在濱河造成了極大的恐慌,老刑警劉巖声邦,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俐填,死亡現(xiàn)場離奇詭異,居然都是意外死亡翔忽,警方通過查閱死者的電腦和手機(jī)英融,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歇式,“玉大人驶悟,你說我怎么就攤上這事〔氖В” “怎么了痕鳍?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長龙巨。 經(jīng)常有香客問我笼呆,道長,這世上最難降的妖魔是什么旨别? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任诗赌,我火速辦了婚禮,結(jié)果婚禮上秸弛,老公的妹妹穿的比我還像新娘铭若。我一直安慰自己,他們只是感情好递览,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布叼屠。 她就那樣靜靜地躺著,像睡著了一般绞铃。 火紅的嫁衣襯著肌膚如雪镜雨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天儿捧,我揣著相機(jī)與錄音荚坞,去河邊找鬼挑宠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛西剥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亿汞,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞭空,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疗我?” 一聲冷哼從身側(cè)響起咆畏,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吴裤,沒想到半個(gè)月后旧找,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麦牺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年钮蛛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剖膳。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魏颓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吱晒,到底是詐尸還是另有隱情甸饱,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布仑濒,位于F島的核電站叹话,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏墩瞳。R本人自食惡果不足惜驼壶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喉酌。 院中可真熱鬧辅柴,春花似錦、人聲如沸瞭吃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歪架。三九已至股冗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間和蚪,已是汗流浹背止状。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國打工烹棉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怯疤。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓浆洗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親集峦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伏社,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • 以下是《瘋狂Java講義》中的一些知識(shí),如有錯(cuò)誤塔淤,煩請指正摘昌。 集合概述 Java集合可以分為Set、List高蜂、Ma...
    hainingwyx閱讀 539評(píng)論 0 1
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 875評(píng)論 0 1
  • 前言 Java中集合大家族的成員實(shí)在是太豐富了聪黎,有常用的ArrayList、HashMap备恤、HashSet稿饰,也有不...
    AndryYu閱讀 1,438評(píng)論 0 1
  • 3.3 集合 一方面, 面向?qū)ο笳Z言對(duì)事物的體現(xiàn)都是以對(duì)象的形式露泊,為了方便對(duì)多個(gè)對(duì)象的操作湘纵,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另...
    閆子揚(yáng)閱讀 728評(píng)論 0 1
  • Collection & Map Collection 子類有 List 和 Set List --> Array...
    任教主來也閱讀 3,162評(píng)論 1 9