最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解析HashMap的put方法

 更新時間:2022年01月19日 16:50:24   作者:小寫丶H  
在Java集合中,HashMap的重要性不言而喻,作為一種存儲鍵值對的數(shù)據(jù)結(jié)構(gòu),它在日常開發(fā)中有著非常多的應(yīng)用場景,也是面試中的高頻考點,本篇文章就來分析一下HashMap集合中的put方法

一.創(chuàng)建

這個相信大家也都知道怎么使用。今天就深入理解一下這里的底層原理。 首先HashMap在java中,創(chuàng)建出來是一個數(shù)組,然后數(shù)組上存放的元素是一個鏈表。

二.put()

進入底層源碼看一下。

HashMap,在添加第一個元素的時候創(chuàng)建一個默認2的冪的數(shù)組。也就是16,這個參數(shù)也可以你自己設(shè)置。但是一定是2的冪,假如new HashMap(30),那么只會創(chuàng)建一個32大小的數(shù)組。

計算出元素的hashcode,放到指定位置,看數(shù)組中是否有元素,無元素直接放到數(shù)組元素上,有元素的話則進行(jdk1.8)尾插。

當一個數(shù)組元素下的鏈表長度超過8,就會觸發(fā)treeifyBin(),

但是必須滿足,數(shù)組的長度大于64,否則,只是就行resize()擴容,重新hash。 如果滿足鏈表長度大于8,并且數(shù)組長度大于64,此時就把鏈表轉(zhuǎn)換成紅黑樹(一種比較平衡的二叉搜索樹)。 著里再講一個設(shè)計remove()刪除元素,當紅黑樹里的元素被刪除到小于8的時候怎么辦?其實這里有個過渡,不是8,而是如果紅黑樹里的元素刪除的小于6的時候就會觸發(fā)收縮檢測。

此時就會紅黑樹收縮回鏈表了。

三.數(shù)組初始化

前面 put里提到過,初始new HashMap() 默認大小是16,可以指定數(shù)組大小,但是一定是2的冪。如 new HashMap(30),那么數(shù)組的大小就為32了。這個都很好理解。

四.擴容

負載因子 = 添加的元素 / hash表的長度

這個值默認是 0.75 ( jdk1.8)(可以根據(jù)實際需求調(diào)整,當值越大hash沖突概率就高,查詢效率低,節(jié)省了空間,反之相反),當超過0.75,就會觸發(fā)resize(),進行數(shù)組的擴容。

到此這篇關(guān)于深入解析HashMap的put方法的文章就介紹到這了,更多相關(guān)HashMap put方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RocketMQ消息丟失場景以及解決方法

    RocketMQ消息丟失場景以及解決方法

    這篇文章主要給大家介紹了關(guān)于RocketMQ消息丟失場景以及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • intellij idea中spring boot properties文件不能自動提示問題解決

    intellij idea中spring boot properties文件不能自動提示問題解決

    這篇文章主要介紹了intellij idea中spring boot properties文件不能自動提示問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • spring boot 如何指定profile啟動

    spring boot 如何指定profile啟動

    這篇文章主要介紹了spring boot 如何指定profile啟動的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解Spring?Security怎么從數(shù)據(jù)庫加載我們的用戶

    詳解Spring?Security怎么從數(shù)據(jù)庫加載我們的用戶

    這篇文章主要為大家介紹了Spring?Security怎么從數(shù)據(jù)庫加載我們的用戶示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Spring oxm入門實例

    Spring oxm入門實例

    這篇文章主要介紹了Spring oxm入門實例,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • 與近日火爆的ChatGPT聊Elasticsearch源碼

    與近日火爆的ChatGPT聊Elasticsearch源碼

    這篇文章主要為大家分享了與近日火爆的ChatGPT聊Elasticsearch源碼的話題內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Spring類型轉(zhuǎn)換 ConversionSerivce Convertor解析

    Spring類型轉(zhuǎn)換 ConversionSerivce Convertor解析

    這篇文章主要介紹了Spring類型轉(zhuǎn)換 ConversionSerivce Convertor的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • java高并發(fā)的volatile與Java內(nèi)存模型詳解

    java高并發(fā)的volatile與Java內(nèi)存模型詳解

    這篇文章主要介紹了java高并發(fā)的volatile與Java內(nèi)存模型,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • 基于mybatis高級映射多對多查詢的實現(xiàn)

    基于mybatis高級映射多對多查詢的實現(xiàn)

    下面小編就為大家?guī)硪黄趍ybatis高級映射多對多查詢的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • springboot集成springsession如何實現(xiàn)分布式session共享

    springboot集成springsession如何實現(xiàn)分布式session共享

    這篇文章主要介紹了springboot集成springsession如何實現(xiàn)分布式session共享問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

沁水县| 信宜市| 石泉县| 宁夏| 万年县| 洛南县| 北辰区| 哈尔滨市| 定南县| 浏阳市| 治多县| 布拖县| 五指山市| 常德市| 辽宁省| 日土县| 无棣县| 乳源| 体育| 田阳县| 和平区| 新和县| 眉山市| 社会| 衡阳市| 长子县| 德格县| 香港| 五莲县| 沭阳县| 江安县| 霍林郭勒市| 军事| 峨边| 五原县| 宁德市| 普格县| 肇庆市| 凤山县| 古丈县| 高唐县|