Java集合總結(jié)

總結(jié)圖片

一:List

  1. Java ArrayList源碼學(xué)習(xí)
  2. Java LinkedList源碼學(xué)習(xí)
  3. Java Vector源碼學(xué)習(xí)

二:Queue

  1. Java ArrayDeque源碼學(xué)習(xí)
  2. Java PriorityQueue源碼學(xué)習(xí)

三:Set

基于相應(yīng)的Map實(shí)現(xiàn) Set<E> = Map<E,Object>, final Object PRESENT = new Object();

四:Map

  1. HashMap:它根據(jù)鍵的hashCode值存儲(chǔ)數(shù)據(jù)彻秆,大多數(shù)情況下可以直接定位到它的值裸扶,因而具有很快的訪問速度瞬逊,但遍歷順序卻是不確定的。 HashMap最多只允許一條記錄的鍵為null垮庐,允許多條記錄的值為null。HashMap非線程安全哄酝,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫HashMap麦向,可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要滿足線程安全浴韭,可以用 Collections的synchronizedMap方法使HashMap具有線程安全的能力丘喻,或者使用ConcurrentHashMap。
    Java HashMap源碼學(xué)習(xí)

  2. Hashtable:Hashtable是遺留類念颈,很多映射的常用功能與HashMap類似泉粉,不同的是它承自Dictionary類,并且是線程安全的,任一時(shí)間只有一個(gè)線程能寫Hashtable嗡靡,并發(fā)性不如ConcurrentHashMap跺撼,因?yàn)镃oncurrentHashMap引入了分段鎖。Hashtable不建議在新代碼中使用讨彼,不需要線程安全的場(chǎng)合可以用HashMap替換财边,需要線程安全的場(chǎng)合可以用ConcurrentHashMap替換。

  3. LinkedHashMap:LinkedHashMap是HashMap的一個(gè)子類点骑,保存了記錄的插入順序酣难,在用Iterator遍歷LinkedHashMap時(shí),先得到的記錄肯定是先插入的黑滴,也可以在構(gòu)造時(shí)帶參數(shù)憨募,按照訪問次序排序。
    默認(rèn)構(gòu)造函數(shù)是只記錄插入順序

     LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
     map.put("one", 1);
     map.put("two", 2);
     map.put("three", 3);
     map.put("two", 3);
     //[one=1, two=3, three=3]
    
     記錄訪問順序袁辈,每次訪問node都會(huì)將其添加到鏈表的尾部菜谣;
     遍歷時(shí)從頭部開始遍歷;
     LinkedHashMap<String, Integer> map = new LinkedHashMap<>(16, (float) 0.75, true);
     map.put("one", 1);
     map.put("two", 2);
     map.put("three", 3);
     map.get("two");
     // [one=1, three=3, two=2]
    
  4. TreeMap:TreeMap實(shí)現(xiàn)SortedMap接口晚缩,能夠把它保存的記錄根據(jù)鍵排序尾膊,默認(rèn)是按鍵值的升序排序,也可以指定排序的比較器荞彼,當(dāng)用Iterator遍歷TreeMap時(shí)冈敛,得到的記錄是排過序的。如果使用排序的映射鸣皂,建議使用TreeMap抓谴。在使用TreeMap時(shí),key必須實(shí)現(xiàn)Comparable接口或者在構(gòu)造TreeMap傳入自定義的Comparator寞缝,否則會(huì)在運(yùn)行時(shí)拋出java.lang.ClassCastException類型的異常癌压。

  5. ConcurrentHashMap

    • JDK1.7
      Segment + HashEntry;每個(gè)Segment繼承了ReentrantLock荆陆,自帶鎖功能滩届;
      size實(shí)現(xiàn):因?yàn)镃oncurrentHashMap是可以并發(fā)插入數(shù)據(jù)的,所以在準(zhǔn)確計(jì)算元素時(shí)存在一定的難度被啼,一般的思路是統(tǒng)計(jì)每個(gè)Segment對(duì)象中的元素個(gè)數(shù)帜消,然后進(jìn)行累加,但是這種方式計(jì)算出來的結(jié)果并不一樣的準(zhǔn)確的趟据,因?yàn)樵谟?jì)算后面幾個(gè)Segment的元素個(gè)數(shù)時(shí)券犁,已經(jīng)計(jì)算過的Segment同時(shí)可能有數(shù)據(jù)的插入或則刪除术健。

    • JDK1.8
      1.8中放棄了Segment臃腫的設(shè)計(jì)汹碱,取而代之的是采用Node + CAS + Synchronized來保證并發(fā)安全進(jìn)行實(shí)現(xiàn); 每個(gè)Node結(jié)點(diǎn)為空時(shí)CAS式添加荞估,鏈表/紅黑樹添加節(jié)點(diǎn)需要Synchronized內(nèi)置鎖咳促;
      size實(shí)現(xiàn):1.8中使用一個(gè)volatile類型的變量baseCount記錄元素的個(gè)數(shù)稚新,當(dāng)插入新數(shù)據(jù)或則刪除數(shù)據(jù)時(shí),會(huì)通過addCount()方法更新baseCount跪腹;

    參考:談?wù)凜oncurrentHashMap1.7和1.8的不同實(shí)現(xiàn)


@夢(mèng)工廠2018.3.26

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末褂删,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冲茸,更是在濱河造成了極大的恐慌屯阀,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轴术,死亡現(xiàn)場(chǎng)離奇詭異难衰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逗栽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門盖袭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彼宠,你說我怎么就攤上這事鳄虱。” “怎么了凭峡?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵拙已,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我摧冀,道長(zhǎng)悠栓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任按价,我火速辦了婚禮惭适,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘楼镐。我一直安慰自己癞志,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布框产。 她就那樣靜靜地躺著凄杯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秉宿。 梳的紋絲不亂的頭發(fā)上戒突,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音描睦,去河邊找鬼膊存。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隔崎。 我是一名探鬼主播今艺,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爵卒!你這毒婦竟也來了虚缎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤钓株,失蹤者是張志新(化名)和其女友劉穎实牡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轴合,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铲掐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了值桩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摆霉。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讲冠,死狀恐怖寇荧,靈堂內(nèi)的尸體忽然破棺而出捆探,到底是詐尸還是另有隱情罪塔,我是刑警寧澤统阿,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布窄潭,位于F島的核電站帆卓,受9級(jí)特大地震影響痢毒,放射性物質(zhì)發(fā)生泄漏澜建。R本人自食惡果不足惜向挖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炕舵。 院中可真熱鬧何之,春花似錦、人聲如沸咽筋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奸攻。三九已至蒜危,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睹耐,已是汗流浹背辐赞。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硝训,地道東北人响委。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓新思,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晃酒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • Java SE 基礎(chǔ): 封裝窄绒、繼承贝次、多態(tài) 封裝: 概念:就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體,并盡...
    Jayden_Cao閱讀 2,109評(píng)論 0 8
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 3,880評(píng)論 2 8
  • 曾經(jīng)彰导,有句似乎正確無比的雞湯:“時(shí)間蛔翅,就像海綿里的水,擠一擠總是有的位谋∩轿觯”這話,曾經(jīng)對(duì)掏父,現(xiàn)在則完全無效了笋轨。原因如下:...
    大胡子逸舟閱讀 302評(píng)論 0 0
  • 我們請(qǐng)求時(shí)通常會(huì)創(chuàng)建一個(gè)字典然后把參數(shù)放到字典里,如 如果后請(qǐng)求的接收方式是以post時(shí)赊淑,后臺(tái)接收方式是以 fro...
    5619c8b6c380閱讀 1,436評(píng)論 0 3
  • 沙漏在翻天覆地爵政, 桌上除了書和電腦,電扇和多肉植物陶缺,還有一塊米白的蒸糕钾挟。 把《學(xué)不會(huì)》的那首歌停掉, 不準(zhǔn)循環(huán)饱岸,也...
    迦顏閱讀 228評(píng)論 0 0