public class hashmapextends abstractmapimplements map, cloneable
, serializable
{}
類定義:hashmap繼承了abstractmap,實現map,cloneable,serializable 介面
abstractmap: 實現了一些方法,這裡不做解釋;
cloneable:是乙個標識介面,(應該是表示實現它的類允許被複製之類的。。。。)
構造方法:
/**
initialcapacity : map的初始容量
loadfactor :載入因子/係數
*/public hashmap(int initialcapacity, float loadfactor)
/** 設定初始容量
使用預設載入因子初始化map,預設為0.75
*/public hashmap(int initialcapacity)
/** 使用預設容量和載入因子初始化map
*/public hashmap()
/** 將map作為模板引數直接匯入本hashmap
*/public hashmap(map extends k, ? extends v> m)
類成員:
//預設的初始容量大小 16
static final int default_initial_capacity = 1 << 4;
//hashmap的最大容量 1073741824
static final int maximum_capacity = 1 << 30;
//預設載入因子
static final float default_load_factor = 0.75f;
//使用紅黑樹替代鍊錶的閾值,>= 這個閾值鍊錶將轉化為紅黑樹
static final int treeify_threshold = 8;
//當同乙個桶上鍊表節點<= 6時,紅黑樹將轉化為鍊錶,反轉
static final int untreeify_threshold = 6;
//hashmap可以將鍊錶轉化為樹結構的最小閾值,也就是要達到64個桶位,才會開啟轉化
static final int min_treeify_capacity = 64;
//儲存鍵值對資料
transient set> entryset;
//本hashmap中鍵值對數量
transient int size;
//此hashmap中結構變化的次數,改動次數
transient int modcount;
//如果初始化沒有給hashmap分配桶容量大小,則這裡儲存的是預設大小default_initial_capacity值
int threshold;
//這個儲存的也是載入因子,而default_load_factor 是沒有指定情況下預設的載入因子
final float loadfactor;
下面看下hashmap的資料結構
transient node table;
static class nodeimplements map.entry
可以看出,hashmap基本結構是由陣列+鍊錶形式,如上圖 array [1] 所示
陣列中每個元素都是node型別,也就是鍵值對形式
static class nodeimplements map.entry
也就是說,node陣列每個元素都可以容納一條鍊錶,該元素就是它容納的鍊錶的頭節點,通過訪問它的next屬性,就可以遍歷該鍊錶所有元素。
主要看下節點類的3個方法
/**
獲取該節點的hash值
key的hash 和 value的hash 用按位異或運算
*/public final int hashcode()
/**給該節點設定新值,返回原來的值
*/public final v setvalue(v newvalue)
/**比較node節點物件內容是否相同
*/public final boolean equals(object o)
return false;
}
JDK原始碼學習 HashMap
什麼是hash?hash的意思是 雜湊 音譯做 雜湊 輸入乙個任意長度的資料,進過雜湊運算之後,輸出一段固定長度的資料,作為輸入資料的指紋,輸出的結果就是雜湊值。一般來說輸入資料的空間遠遠大於輸出的雜湊值的空間,輸入不同的資料可能會產生相同的雜湊值,所以很難從雜湊值來逆向推出輸入值是什麼。雜湊函式本...
JDK原始碼學習01 HashMap原始碼學習
hashmap中直接注意的細節 紅黑樹長度小於閾值 yu 4聲 6轉化成兩邊 鍊錶長度大於閾值8 且table的長度大於等於64 才樹化 僅滿足鍊錶長度大於閾值8只會呼叫resize擴容 為什麼是6和8呢,而不設定成一樣呢,因為為了防止在邊界反覆橫跳,浪費效能if tab null n tab.le...
JDK原始碼之HashMap
部分重要屬性 存放key,value的陣列 transient node table 存放entry的set transient set entryset hashmap的大小 預設16 transient int size 修改次數 transient int modcount 擴擴容閾值capa...