欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java  HashMap擴容詳解及實例代碼

 更新時間:2017年02月17日 15:18:07   投稿:lqh  
這篇文章主要介紹了java HashMap擴容詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下

HashMap擴容

前言:

HashMap的size大于等于(容量*加載因子)的時候,會觸發(fā)擴容的操作,這個是個代價不小的操作。

為什么要擴容呢?HashMap默認的容量是16,隨著元素不斷添加到HashMap里,出現(xiàn)hash沖突的機率就更高,那每個桶對應(yīng)的鏈表就會更長,

這樣會影響查詢的性能,因為每次都需要遍歷鏈表,比較對象是否相等,一直到找到元素為止。

為了提升查詢性能,只能擴容,減少hash沖突,讓元素的key盡量均勻的分布。

擴容基本點

加載因子默認值是0.75

static final float DEFAULT_LOAD_FACTOR = 0.75f;

容量的默認值是16

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 等于16

HashMap提供了一個構(gòu)造參數(shù),可以在創(chuàng)建的時候指定容量和加載因子。

 public HashMap(int initialCapacity, float loadFactor)

默認的情況下,HashMap 的size一旦大于等于16*0.75=12的話,

同時每個Entry(或者叫桶)里面至少有一個元素的時候就會進行擴容。

 if ((size >= threshold) && (null != table[bucketIndex])) {
      resize(2 * table.length);
      hash = (null != key) ? hash(key) : 0;
      bucketIndex = indexFor(hash, table.length);
}

擴容的時候,容器容量翻倍

 resize(2 * table.length);

擴容的時候需要重新計算元素的數(shù)組下標(biāo)

1、重新分配一個新的Entry數(shù)組
2、重新計算原來元素的在新數(shù)組中的下標(biāo)(比較耗資源)

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java基于NIO實現(xiàn)聊天室功能

    Java基于NIO實現(xiàn)聊天室功能

    這篇文章主要為大家詳細介紹了Java基于NIO實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java獲取彩色圖像中的主色彩的實例代碼

    Java獲取彩色圖像中的主色彩的實例代碼

    這篇文章主要介紹了Java獲取彩色圖像中的主色彩的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • SpringBoot項目中feignClient使用方式

    SpringBoot項目中feignClient使用方式

    文章介紹了在Spring Boot項目中配置Feign客戶端攔截器的具體步驟,包括在application.yml中添加配置、在主類上啟用組件掃描、將攔截器加入到攔截器列表中以及在接口調(diào)用時的說明,總結(jié)指出這是個人經(jīng)驗分享,希望對大家有所幫助
    2024-11-11
  • Java實現(xiàn)螺旋矩陣的示例

    Java實現(xiàn)螺旋矩陣的示例

    這篇文章主要介紹了Java實現(xiàn)螺旋矩陣的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Java Spring框架的概述

    Java Spring框架的概述

    這篇文章主要為大家介紹了Java Spring框架,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 一篇文章帶你搞定JAVA Maven

    一篇文章帶你搞定JAVA Maven

    Maven是每個Java程序都會遇到的包管理工具,今天整理一下Maven的相關(guān)知識,從青銅到王者,一文全了解,我們開始吧,希望對你有所幫助
    2021-07-07
  • 一招教你優(yōu)化Java代碼中大量的if/else

    一招教你優(yōu)化Java代碼中大量的if/else

    當(dāng)代碼已經(jīng)復(fù)雜到難以維護的程度之后,只能狠下心重構(gòu)優(yōu)化。那,有什么方案可以優(yōu)雅的優(yōu)化掉這些多余的if/else?本文就來和大家詳細聊聊
    2023-03-03
  • Java線程休眠之sleep方法詳解

    Java線程休眠之sleep方法詳解

    這篇文章主要介紹了Java線程休眠之sleep方法詳解,Thread?類中有一個靜態(tài)方法的sleep方法,當(dāng)該線程調(diào)用sleep方法后,就會暫時讓CPU的調(diào)度權(quán),但是監(jiān)視器資源比如鎖并不會釋放出去,需要的朋友可以參考下
    2024-01-01
  • 深入理解Java中包的定義與使用

    深入理解Java中包的定義與使用

    在開發(fā)過程中,會定義很多類,為了避免相同類名稱出現(xiàn)而發(fā)生覆蓋的情況,把所有java程序保存在各自的目錄里面,而該目錄就是包。包的本質(zhì)實際上就是一個文件夾。本文將給大家詳細的介紹,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值
    2021-09-09
  • 關(guān)于Selenium的UI自動化測試屏幕截圖功能實例代碼

    關(guān)于Selenium的UI自動化測試屏幕截圖功能實例代碼

    今天小編就為大家分享一篇關(guān)于Selenium的UI自動化測試屏幕截圖功能實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論