Java面試集-基礎(chǔ)-HashMap集合

數(shù)據(jù)結(jié)構(gòu)

JDK1.7 是數(shù)組+鏈表:鏈表是單向鏈表,新添加的節(jié)點(diǎn)在前面。

JDK1.8 是紅黑樹。

hashCode

hashCode相同,值不一定相同。
equals相同,值一定相同。

擴(kuò)容相關(guān)

默認(rèn)長度為16
什么時候開始擴(kuò)容,size >= 12

例子:

System.out.println("Ma".hashCode());
System.out.println("NB".hashCode());
//hashcode值都等于2484

擴(kuò)容

image.png

hashmap為什么線程不安全

1. put()方法;

場景:當(dāng)有a,b,c,d 4個線程同時進(jìn)入到這個方法操作同一個Key的時候,其中b做的修改,a,c,d做的是讀操作,那么有可能讀的不是同一個值。

2. resize()方法

場景:當(dāng)有a,b,c,d 4個線程可能同時觸發(fā)擴(kuò)容的操作,各自生成新的數(shù)組并rehash后賦給該map底層的數(shù)組table,結(jié)果最終只有最后一個線程生成的新數(shù)組被賦給table變量,其他線程的均會丟失

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

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

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