關(guān)于HashMap的幾個問題

一、HashMap的哈希桶的初始大小是多少?

初始大小為16,并且必須為2的n次方

二、java 7 和 java 8 對于HashMap的實現(xiàn)有何不同?

java 7 實現(xiàn)方式: 數(shù)組 + 鏈表
java 8 實現(xiàn)方式: 數(shù)組 + 鏈表 / 紅黑樹(鏈表長度大于8)

Java 7 HashMap 存在的問題
1、并發(fā)環(huán)境下非常容易碰到死鎖
2、由于hashcode算法缺陷,HashMap容易產(chǎn)生鏈表,影響性能的同時存在安全隱患
Java 8 HashMap的改進
擴容時插入順序保持不變,防止出現(xiàn)環(huán)形鏈表,形成死循環(huán)
HashMap 擴容時的效率很低,所以在創(chuàng)建HashMap時就指定初始容量,避免頻繁的擴容帶來的性能問題,用空間換時間。

三、為什么HashMap哈希桶的大小必須為2的n次方?

在將一個元素put進一個HashMap時,需要計算其在數(shù)組中的下標,在調(diào)用該對象的hashcosd方法后算出一個int值,即為該元素的hash值,要根據(jù)該hash值來確定元素在數(shù)組中的位置,采用的算法是按位與運算: hashcode & (array.length-1) 只有桶的大小為2的冪,array.length-1得到的值二進制永遠全部都是1,這樣計算出來的下標分布均勻并且快速;反之,如果array.length-1得到的值二進制中存在0,做按位于運算后永遠都是0,,則有些下標位置永遠都會空著。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 摘要 HashMap是Java程序員使用頻率最高的用于映射(鍵值對)處理的數(shù)據(jù)類型。隨著JDK(Java Deve...
    周二倩你一生閱讀 1,366評論 0 5
  • 以前菜得不能看的時候看Java的招聘要求:Java基礎(chǔ)扎實,熟悉常用集合類,多線程,IO,網(wǎng)絡(luò)編程,經(jīng)常會疑惑,集...
    加油小杜閱讀 1,498評論 0 0
  • 那日匆匆走過青年街,驚鴻一瞥間,在經(jīng)營圍巾的萬花叢中看到了你,瞬間,我的心中彌漫柔情!你的靜逸,你的柔美,你的淺灰...
    東流水sh閱讀 732評論 10 10
  • 最近很多人問我,你一天到晚喝茶,到底是在喝什么?這個問題一下把我問到了,對啊,我特么到底是在喝什么? 前幾天在越南...
    立七閱讀 1,427評論 0 0
  • 這幾天,真是折騰得夠嗆。先生出差,大兒子發(fā)燒,小兒子長牙,最后我自己也發(fā)燒了。 但是,最最折騰的不是我發(fā)燒,是發(fā)燒...
    放慢腳步放低聲音閱讀 116評論 0 0

友情鏈接更多精彩內(nèi)容