Java之HashSet的底層原理:面試常問考點

  1. HashSet 在很多面試中都是一個高頻的考點。那么我們看看HashSet面試都問什么?
    • 面試官常問你HashSet的底層數(shù)據(jù)結(jié)構(gòu)是什么灌具? HashMap ,這個 時候面試官又問HashMap 怎么能對呢? HashMap 是<k,v >的數(shù)據(jù)結(jié)構(gòu)啊捣鲸,而HashSet 是一個v的數(shù)據(jù)結(jié)構(gòu)啊瑟匆,這個時候面試官會說我覺得你對源碼了解的不多。但是其實頂層就是HashMap的數(shù)據(jù)結(jié)構(gòu)栽惶,用HashMap的key去保存Set中的值愁溜,而HashMap中的V是一個Object對象常量 (如下圖中的源碼)。這個時候面試官又會問哪為什么用Object 對象呢外厂?用Null不是更好嘛冕象?


      image.png
    • 接下來我們就分析分析為什么使用Object 對象而不是用Null。這也要看源碼了汁蝶,這和remove(Object o)方法有關(guān)渐扮。因為我們知道HashSet底層使用的是HashMap论悴,所有remove也是調(diào)用HashMap方法的,我們既然要使用remove方法墓律,我們也看到了boolean 這個返回值膀估,這就要求我們需要返回一個boolean值,那么如果我們設(shè)置的值不是Object 對象而是Null的話耻讽,使用remove方法移除那個值就判斷不出來到底刪除成功還是沒有成功了察纯。所以不能使用Null。


      image.png
  2. 如果你仔細看源碼里面的方法针肥,你會發(fā)現(xiàn)很多方法都是調(diào)用HashMap中的方法(詳細請看Java之HashMap的底層原理:面試潮牵考知識點
    ) 。如下等等慰枕。
    image.png

    image.png
  3. 其實HashSet就是低配版本的HashMap,這就是為什么HashMap 這么重要的一個原因具则。當我們看LinkedHashMap源碼的時候發(fā)現(xiàn)底層就是HashSet,那么HashSet底層是LinkedHashMap捺僻,那么大膽的猜測一下LinkedHashMap是不是HashMap.沒錯我們猜對了乡洼。


    image.png

    image.png

    image.png
    • 同HashSet相比并沒有實現(xiàn)新的功能(新的方法),只不過把HashSet中預(yù)留的構(gòu)造方法啟用了匕坯,因而可以實現(xiàn)有序插入束昵,而這個具體的實現(xiàn)要去看LinkedHashMap了,我們使用時是不需要再可以去設(shè)置參數(shù)的葛峻,直接拿來用就行了锹雏。


      image.png

      image.png
    • 看上面accessOrder = false;這個是給構(gòu)造器的一個參數(shù),告訴構(gòu)造器使用插入的順序术奖。
  4. 線程安全的Set
  5. 總結(jié)
    • HashSet采记、LinkHashSet佣耐、TreeSet的迭代遍歷順序是怎樣的呢?
      • Set是沒有g(shù)et()方法的唧龄,是通過map的iterator迭代器遍歷的兼砖。
    • LinkHashSet迭代順序也是按照插入順序遍歷的,底層是有一個變量accessOrder = false既棺,這是給HashSet迭代器的一個參數(shù)讽挟,才使它也是根據(jù)插入順序迭代順序輸出的。
    • TreeSet中存放的元素是有序的(不是插入時的順序丸冕,是有按關(guān)鍵字大小排序的)耽梅,且元素不能重復(fù)。而如何實現(xiàn)有序存儲胖烛,就需要有一個比較器眼姐,其實說起來诅迷,TreeSet更受關(guān)注的是不重復(fù)且有序,這個有序就需要有一個compare的過程妥凳,因此會需要參數(shù)實現(xiàn)Comparable接口竟贯。
    • 如果想徹底了解底層到底是如何思想那就需要看看我寫的Java之HashMap的底層原理:面試常考知識點
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逝钥,一起剝皮案震驚了整個濱河市屑那,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艘款,老刑警劉巖持际,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哗咆,居然都是意外死亡蜘欲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門晌柬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姥份,“玉大人,你說我怎么就攤上這事年碘〕呵福” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵屿衅,是天一觀的道長埃难。 經(jīng)常有香客問我,道長涤久,這世上最難降的妖魔是什么涡尘? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮响迂,結(jié)果婚禮上考抄,老公的妹妹穿的比我還像新娘。我一直安慰自己蔗彤,他們只是感情好川梅,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幕与,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镇防。 梳的紋絲不亂的頭發(fā)上啦鸣,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音来氧,去河邊找鬼诫给。 笑死香拉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的中狂。 我是一名探鬼主播凫碌,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胃榕!你這毒婦竟也來了盛险?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤勋又,失蹤者是張志新(化名)和其女友劉穎苦掘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楔壤,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡鹤啡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹲嚣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片递瑰。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖隙畜,靈堂內(nèi)的尸體忽然破棺而出抖部,到底是詐尸還是另有隱情,我是刑警寧澤禾蚕,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布您朽,位于F島的核電站,受9級特大地震影響换淆,放射性物質(zhì)發(fā)生泄漏哗总。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一倍试、第九天 我趴在偏房一處隱蔽的房頂上張望讯屈。 院中可真熱鬧,春花似錦县习、人聲如沸涮母。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叛本。三九已至,卻和暖如春彤钟,著一層夾襖步出監(jiān)牢的瞬間来候,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工逸雹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留营搅,地道東北人云挟。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像转质,于是被迫代替她去往敵國和親园欣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 搞懂 HashSet & LinkedHashSet 源碼 以及集合常見面試題目 經(jīng)過上兩篇的 HashMap 和...
    醒著的碼者閱讀 2,447評論 1 5
  • 原文地址 Java集合 Java集合框架:是一種工具類休蟹,就像是一個容器可以存儲任意數(shù)量的具有共同屬性的對象沸枯。 Ja...
    gyl_coder閱讀 978評論 0 8
  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,939評論 0 13
  • 活動啟示: 稷下心理研究中心心靈成長讀書會國慶戶外品讀會(地點:淄博市水系公園,華光路與西十路路口西南角鸡挠;時間...
    踏浪的榴蓮閱讀 502評論 3 5
  • 不知何時起辉饱,公寓樓下搬來了一家“香滿田園”的小吃攤〖鹫梗可謂名副其實彭沼,進進出出校園,都能聞到那濃烈的炸洋芋味道备埃。 洋芋...
    雪上陽光閱讀 284評論 0 6