https://labuladong.online/algo/data-structure-basic/hashtable-chaining/
今天是學習的第 13 天,主要學習了用拉鏈法實現哈希表:
在上一個單元苦痛之路 Day 13 - 哈希表核心原理中,我們有提到當發生哈希衝突時,有兩種常見的解決方案:
key-value
對存儲在同一個鏈表中index + 1
開始尋找空位置拉鏈法的基本思想是:當多個鍵值經過哈希函數計算後得到相同的索引時,將這些鍵值對儲存在同一個位置的鏈表中。
資料結構設計
key-value
)[[KVnode], [KVNode], ..., [KVNode]]
核心操作邏輯
哈希函式設計
hash(key) = key % table.length
hash(key) {
return key % this.table.length;
}
hashCode
方法,提供更好的分佈均勻性hash(key) {
return Math.abs((key.hashCode ? key.hashCode() : this.defaultHash(key)) % this.table.length);
}
動態擴縮容機制
// 如果元素數量超過了負載因子,進行擴容
if (this.size >= this.table.length * 0.75) {
this.resize(this.table.length * 2);
}
// 當負載因子小於 0.125 時,進行縮容
if (this.size <= this.table.length / 8) {
this.resize(Math.floor(this.table.length / 4));
}
key-value
)hashCode
方法,提供更好的分佈均勻性