開發者學堂課程【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( ) ;
}
}
出現錯誤

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