天天看點

HashMap源代碼|學習筆記HashMap源代碼

開發者學堂課程【Java面試疑難點串講1:面試技巧及語言基礎:HashMap源代碼】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址: https://developer.aliyun.com/learning/course/24

HashMap源代碼

内容介紹

1. HashMap類

2. 代碼示例

HashMap源代碼沒有什麼特别多的關注點,主要需要從裡面看出來以下幾點: Map.Entry 與HashMap.Node類;

static class Node<K,v> implements Map.Entry<K,v>{

在HashMap存儲資料增加到一定數量的時候(門檻值),那麼就會由連結清單變為紅黑樹(類似于二分查找

的性能更快);.

• 門檻值: static final int TREEIFY_ THRESHOLD = 8;超過了這個内容變為紅黑樹;

• HashMap_裡面對于資料的儲存個數的擴充是按照倍數進行的,但是這裡面有一個參考

• static final float DEFAULTLOADFACTOR = 0.75f;

• 如果達到了16*0.75個數的時候會進行第一次的容量擴充

• HashMap_裡面的方法都是異步處理,屬于非線程安全的:

import java.util.HashMap;

import java.util.Map;

public class Demo {

public static void main(String[ ] args) throws Exception {

Map<String, string> map = new HashMap<string,string>();

for (int x =  ; x < 10 ; x ++) {

new .Thread(()->{

for( int y=0;y<3 ;y++){

map.put(Thread.currentThread().getName(),"y="+y);

}).start( ) ;

}

}

出現錯誤

HashMap源代碼|學習筆記HashMap源代碼

此時會出現“java.util.ConcurrentModificationException”表示的就是存儲個數和操作個數不同。