HashMap底層為什麼一定用陣列

2022-10-11 02:33:11 字數 1073 閱讀 3084

hashmap原始碼資料結構:

entry table = new entry[capacity];
其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下:

listtable = new linkedlist();
將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原因有以下兩點:

1)陣列效率高

在hashmap中,定位桶的位置是利用元素的key的雜湊值對陣列長度取模得到。此時,我們已得到桶的位置。顯然陣列的查詢效率比linkedlist大。

2)可自定義擴容機制

採用基本陣列結構,擴容機制可以自己定義,hashmap中陣列擴容剛好是2的次冪,在做取模運算的效率高。

(如:arraylist底層也是陣列,但是擴容機制是1.5倍擴容)

參考:

hashmap原始碼資料結構:

entry table = new entry[capacity];
其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下:

listtable = new linkedlist();
將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原因有以下兩點:

1)陣列效率高

在hashmap中,定位桶的位置是利用元素的key的雜湊值對陣列長度取模得到。此時,我們已得到桶的位置。顯然陣列的查詢效率比linkedlist大。

2)可自定義擴容機制

採用基本陣列結構,擴容機制可以自己定義,hashmap中陣列擴容剛好是2的次冪,在做取模運算的效率高。

(如:arraylist底層也是陣列,但是擴容機制是1.5倍擴容)

參考:

HashMap底層為什麼一定用陣列

hashmap原始碼資料結構 entry table new entry capacity 其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下 listtable new linkedlist 將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原...

為什麼重寫就一定需要重寫HashCode方法

equals 和 hashcode方法是屬於object的,所以每個物件都有自己的equals 和 hashcode方法。在object中equals方法是用來判斷兩個物件是否是同乙個也就是他們的儲存位址是一樣的。但是往往我們有自己的需要定義equal,所以重寫equals方法很重要!下面來說說eq...

TCP為什麼一定進行三次握手?

當 客戶端向 伺服器端 傳送乙個連線請求時,由於某種原因 長時間駐留在網路節點中 無法達到伺服器端,由於 tcp的超時重傳機制 當客戶端在特定的時間內沒有收到伺服器端的確認應答資訊,則會 重新向伺服器端 傳送連線請求 且該連線請求得到伺服器端的響應並正常建立連線,進而傳輸資料,當資料傳輸完畢,並釋放...