資料結構
jdk1.8對hashmap進行了比較大的優化,底層由以前的陣列+鍊錶變成了陣列+鍊錶+紅黑樹的實現形式,當鏈結結點較少時用鍊錶,當鏈結結點超過一定值的時候用紅黑樹。
繼承實現
屬性
//預設容量
static final int default_initial_capacity = 16;
//最大容量
static final int maximum_capacity = 1073741824;
//預設載入因子
static final float default_load_factor = 0.75f;
//鍊錶轉化為紅黑樹的閥值
static final int treeify_threshold = 8;
//存放元素的實際陣列
transient hashmap.node table;
transient set> entryset;
//實際儲存的key-value數量
transient int size;
//修改次數
transient int modcount;
//[略]擴容參考值
int threshold;
//負載因子
final float loadfactor;
構造方法
/**
initialcapacity:預設大小16
loadfactor:預設0.75
*/public hashmap(int var1)
public hashmap()
public hashmap(map extends k, ? extends v> var1)
public hashmap(int initialcapacity, float loadfactor)
核心方法
public v put(k var1, v var2)
public setkeyset()
public v replace(k var1, v var2)
總結
1.hashmap結合了陣列和鍊錶的優點,使用hash演算法加快訪問速度,使用雜湊表解決碰撞衝突的問題,其中陣列的每個元素是單鏈表的頭結點,鍊錶是用來解決衝突的
2.hashmap有兩個重要的引數:初始容量和載入因子。這兩個引數極大的影響了hashmap的效能。初始容量是hash陣列的長度,當前載入因子=當前hash陣列元素/hash陣列長度,最大載入因子為最大能容納的陣列元素個數(預設最大載入因子為0.75),當hash陣列中的元素個數超出了最大載入因子和容量的乘積時,要對hashmap進行擴容,擴容過程存在於hashmap的put方法中,擴容過程始終以2次方增長。
3.hashmap是泛型類,key和value可以為任何型別,包括null型別。key為null的鍵值對永遠都放在以table[0]為頭結點的鍊錶中,當然不一定是存放在頭結點table[0]中。
HashMap原始碼閱讀
the default initial capacity must be a power of two.預設容量必須是2的n次方,預設大小為16 static final int default initial capacity 16 the maximum capacity,used if a h...
HashMap原始碼閱讀
繼承樹 注意下方的 元素 二字 按照習慣,先看建構函式和第一次新增 首先無參的建構函式 讓過載因子等於0.75 public hashmap 然後是put函式,呼叫了內部的putval函式 public v put k key,v value 在看這個方法之前,要先知道hashmap中儲存元素的型別...
HashMap 1 8 原始碼閱讀
一 初始化 1.無參建構函式 負載因子預設值 static final float default load factor 0.75f 指定loadfactor負載因子的值是0.75f public hashmap 2.指定初始化大小和負載因子 hashmap的最大容量 static final i...