乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java 8 中 HashMap 到底有啥不同?

       Coder編程 2021-04-26

      作者:廢物大師兄
      來源:www.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值,進而計算得到應(yīng)該放置到數(shù)組的位置

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

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

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

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

      1、計算hash求位置

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

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

      總結(jié):

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

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

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

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

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

      劃重點:

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

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

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

      3、擴容的時候,1.8中不會出現(xiàn)死循環(huán),而1.7中容易出現(xiàn)死循環(huán),而且鏈表不會倒置
      近期熱文推薦:

      1.600+ 道 Java面試題及答案整理(2021最新版)

      2.終于靠開源項目弄到 IntelliJ IDEA 激活碼了,真香!

      3.阿里 Mock 工具正式開源,干掉市面上所有 Mock 工具!

      4.Spring Cloud 2020.0.0 正式發(fā)布,全新顛覆性版本!

      5.《Java開發(fā)手冊(嵩山版)》最新發(fā)布,速速下載!

      覺得不錯,別忘了隨手點贊+轉(zhuǎn)發(fā)哦!

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多