日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java 8 中 HashMap 到底有啥不同?

 Coder編程 2021-04-26

作者:廢物大師兄
來源:www.cnblogs.com/cjsblog/p/8207211.html

JDK1.8中的HashMap實(shí)現(xiàn)跟JDK1.7中的實(shí)現(xiàn)有很大差別。

下面分析JDK1.8中的實(shí)現(xiàn),主要看put和get方法。

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

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

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

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

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

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

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

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

1、計(jì)算hash求位置

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

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

總結(jié):

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

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

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ò)容的時(shí)候,1.8中不會(huì)出現(xiàn)死循環(huán),而1.7中容易出現(xiàn)死循環(huán),而且鏈表不會(huì)倒置
近期熱文推薦:

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

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

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

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

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

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多