<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試官:簡單說說Java8中的HashMap到底有啥變化?

          共 1240字,需瀏覽 3分鐘

           ·

          2021-03-12 18:51

          點(diǎn)擊上方 好好學(xué)java ,選擇 星標(biāo) 公眾號

          重磅資訊,干貨,第一時間送達(dá)

          今日推薦:14 個 github 項目!

          個人原創(chuàng)100W +訪問量博客:點(diǎn)擊前往,查看更多

          作者:廢物大師兄

          https://cnblogs.com/cjsblog/p/8207211.html

          JDK1.8中的HashMap實現(xiàn)跟JDK1.7中的實現(xiàn)有很大差別。下面分析JDK1.8中的實現(xiàn),主要看put和get方法。

          構(gòu)造方法的時候并沒有初始化,而是在第一次put的時候初始化

          putVal方法的主要邏輯是這樣的:

          1、如果數(shù)組還沒有初始化(數(shù)組長度是0),則先初始化

          2、通過hash方法計算key的hash值,進(jìn)而計算得到應(yīng)該放置到數(shù)組的位置

          3、如果該位置為空,則直接放置此處

          4、如果該位置不為空,而且元素是紅黑樹,則插入到其中

          5、如果是鏈表,則遍歷鏈表,如果找到相等的元素則替換,否則插入到鏈表尾部

          6、如果鏈表的長度大于或等于8,則將鏈表轉(zhuǎn)成紅黑樹

          1、計算hash求位置

          2、看第一個元素是不是要找的,是則返回,否則遍歷

          擴(kuò)容就是將舊數(shù)組的元素移動到新數(shù)組

          總結(jié)

          1、HashMap底層是用數(shù)組+雙向鏈表+紅黑樹實現(xiàn)的

          2、插入元素的時候,首先通過一個hash方法計算得到key的哈希值,進(jìn)而計算出待插入的位置

          3、如果該位置為空,則直接插入(包裝成Node)

          4、如果該位置有值,則依次遍歷。比較的規(guī)則是,hash值相同,key值相等的元素視為相同,則用新值替換舊值并返回舊值。

          5、如果該位置的元素是紅黑樹結(jié)構(gòu),則同理,查找,找到則替換,沒找到則插入。

          劃重點(diǎn)

          JDK1.8中HashMap與JDK1.7中有很多地方不一樣

          1、1.8中引入了紅黑樹,而1.7中沒有

          2、1.8中元素是插在鏈表的尾部,而1.7中新元素是插在鏈表的頭部

          3、擴(kuò)容的時候,1.8中不會出現(xiàn)死循環(huán),而1.7中容易出現(xiàn)死循環(huán),而且鏈表不會倒置

          推薦文章
          更多項目源碼

          瀏覽 37
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷综合国产 | 青青草男人天堂 | www.大香蕉综合网 | 青青草网站在线 | 精品视频一区二区三区女人 |