HashMap 實現總結

2022-04-19 20:17:49 字數 1913 閱讀 3675

entry類中需包含鍵值的hash值,防止resize時的重複計算;

map容量為2的整冪,可使用位操作取代取餘操作提高效率;

resize時需要將原table的桶內資料置null,利於垃圾**;

hash函式考慮資料高位的影響,可減少衝突。

1

public

class myhashmapimplements imap

2122

public myhashmap(int initialcapacity, float

loadfactor)

30this.loadfactor =loadfactor;

31this.threshold = (int) (capacity *loadfactor);

32 table = new

entry[capacity];33}

3435

public myhashmap(int

initialcapacity)

3839

/**40

* 算術右移,計入高位影響

41*/

42static

int hash(int

h) 45

46@override

47public

v put(k k, v v)

51int hash =hash(k.hashcode());

52int i =indexfor(hash, table.length);

53for (entrye = table[i]; e != null; e =e.next) 60}

61addentry(k, v, i);

62return

null;63

}6465private

void addentry(k k, v v, int

index) 71}

7273

void resize(int

newcapacity)

8081

void

transfer(entry newtable) while (e != null

);100

}101

}102

}103

104private

v putfornull(v value)

108109

/**110

* 用位操作取代取餘操作,前提是陣列長度為2的冪次

111*/

112private

int indexfor(int hash, int

length)

115116

@override

117public

v get(k k)

126 e =e.next;

127}

128return

null

;129

}130

131static

class entry

143144

public

v setvalue(v v)

149150

public

boolean

equals(object o)

154 entry e =(entry) o;

155 object k1 =e.key;

156 object k2 =key;

157if (k1 == k2 || (k1 != null &&k1.equals(k2)))

163}

164return

false

;165

}166

}167 }

面試題總結 HashMap實現原理

jdk1.8中,hashmap採用位桶 鍊錶 紅黑樹實現,當鍊表長度超過閾值 8 時,將鍊錶轉換為紅黑樹,這樣大大減少了查詢時間。hashcode是jdk根據物件的位址或字串或者數字利用hash演算法計算出的int型別的數值。陣列 鍊錶 紅黑樹 首先有乙個每個元素都是鍊錶的陣列,當新增乙個元素 ke...

HashMap 學習總結

本文參考見 by chenssy 知識點 1.hashmap的三個建構函式 hashmap 預設初始容量為16,預設載入因子是0.75 hashmap int initialcapacity 指定初始容量 但預設載入因子為0.75 hashmap int initialcapacity,float ...

HashMap學習總結

答 雜湊表又稱雜湊表是一種k value鍵值對對應關係的資料結構,它通過乙個關鍵碼k,經過雜湊函式,能找到存在陣列上的記錄,查詢速度塊。答 它是底層主幹是陣列 雜湊表的主幹是陣列 陣列裡的每個元素都是煉表頭。到了jdk8,增加了紅黑樹結構,所以,總的來說陣列 鍊錶 紅黑樹。答 hashmap有雜湊表...