hashmap的雜湊演算法

2021-09-11 22:35:31 字數 669 閱讀 6482

static final int hash(object key) {

int h;

return (key == null) ? 0 : (h = key.hashcode()) ^ (h >>> 16);

三元運算子:條件表示式?表示式1:表示式2

^按位異或運算,只要位不同結果為1,不然結果為0;

「<

">>"右移:右邊的位被擠掉,右移一位其值相當於除以2。

如圖,h有32位,將其右移16位後,高位補0,原本處於高16位的1111 1111 1111 1111

就處於低16位。

再與最初的h進行異或運算。

為什麼右移 16 位,為什麼要使用 ^ 位異或?

乙個好的雜湊演算法能夠使得元素分布的更加均勻,從而減少雜湊衝突。

有這樣乙個數學規律:

當 lenth = 2^n 時,x % length = x & (length - 1)

也就是說,長度為2的n次冪時,模運算 % 可以變換為按位與 & 運算。

如:9 % 4 = 1

9 & 3 = 1001 & 0011 = 0001 = 1

C STL中的雜湊表 hash map

需要hash map的原因 map底層實現是紅黑數,查詢的效率是o log n 但是hash map的底層實現是雜湊表,它的查詢效率是o 1 當資料很大的時候,比如100w的時候,map找的話要比較20次左右,但是hash map卻只需要比較一到兩次。所以hash map就需要了。在定義hash m...

雜湊表的實現和HashMap的原理

雜湊衝突最常用的解決辦法有開放定址法和鏈位址 1 開放定址法 2 鏈位址法 上面所說的開發定址法的原理是遇到衝突的時候查詢順著原來雜湊位址查詢下乙個空閒位址然後插入,但是也有乙個問題就是如果空間不足,那他無法 處理衝突也無法插入資料,因此需要裝填因子 插入資料 空間 1。那有沒有一種方法可以解決這種...

STL(十六)hash map雜湊映照容器

hash map雜湊映照容器與map映照容器比較相似,都將記錄型的元素劃分為鍵值和映照資料兩個部分,然後根據鍵值的大小,將鍵值不重複的元素插入容器。不同之處在於,hash map使用雜湊表的資料結構,map使用紅黑樹的資料結構。對於元素的檢索來說,這兩種資料結構都有快速的檢索效率。hash map檢...