0%

資料結構-HashTable-refactor Get Method

get method 在幹嘛?

丟入欲搜尋元素的 key 進去 get method,
如果有找到符合的元素就回傳該元素的 value,
若最終都沒找到相符的
元素,就回傳 null。

get method 程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ...
HashTable.prototype.get = function(key) {
const index = this.hash(key);
if(!this.buckets[index]) return null;
else {
let currentNode = this.buckets[index];
while(currentNode) {
if(currentNode.key === key) return currentNode.value;
currentNode = currentNode.next;
}
return null;
}
}

解析一下 get 的程式碼內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HashTable.prototype.get = function(key) {
const index = this.hash(key); // 先找出傳入的 key 值經過hash 後的對應 index
if(!this.buckets[index]) return null; // 若找不到該 index 對應的 bucket 那就代表根本沒有這個 bucket 存在 Hash Table 中,那就可以直接回傳 null
else {
let currentNode = this.buckets[index]; // 取得 bucket 的第一個元素
// 遍歷 bucket 的 list 裡的所有元素,
// 若發現有任何元素的 key 值等於傳入的 key 值,則回傳該元素的 value
// 若遍歷完整個 list 後,沒有任何元素的 key 值符合,就回傳 null
while(currentNode){
if(currentNode.key === key) return currentNode.value;
currentNode = currentNode.next;
}
return null;
}
}

Take away

  • get method 跟 insert method 實作的方式雷同,
    只是 get 的遍歷條件是當前元素,
    insert 的遍歷條件是當前元素的 next 指向的元素。
  • 若 get 有找到相同 key 值的元素,則回傳此元素的 value,若都沒有就回傳 null。