0%

資料結構-HashTable-retrieveAll method

retrieveAll 在幹嘛?

這個 function 的功能是把 HashTable 裡的所有 node 存在一個陣列裡面,並回傳這個陣列,如此一來我們可以取得所有儲存在 Hash Table 裡的 node。
而 node 會一個一個單獨的被儲存在陣列裡面,不再像 Hash Table 的bucket 是以 LinkedList 的方式將 node 彼此之間串接起來,有點像攤平整個 Hash Table 的感覺。

retrieveAll 程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
// ...
HashTable.retrieveAll = function() {
const allNodes = [];
for(let i = 0; i < this.numBuckets; i++) {
let currentNode = this.buckets[i];
while(currentNode) {
allNodes.push(currentNode);
currentNode = currentNode.next;
}
}

return allNodes;
}

解析一下 retrieveAll 在幹嘛

1
2
3
4
5
6
7
8
9
10
11
12
13
HashTable.prototype.retrieveAll = function() {
const allNodes = []; // 先宣告一個儲存所有 node 的陣列
// 遍歷 HashTable 的 buckets 陣列
for(let i = 0; i < this.numBuckets; i++) {
let currentNode = this.buckets[i]; // 取出當前 bucket,而這個 bucket 的位址目前指向儲存在其內部的 LinkedList 的第一個 node
while(currentNode) { // 遍歷這個 LinkedList
allNodes.push(currentNode); // 將當前 node 塞進 allNodes 陣列裡
currentNode = currentNode.next; // 指向下一個 node
}
}

return allNodes ;
}

Take away

  • 透過 retrieveAll 可以取得所有儲存在 HashTable 裡的 node,而且是攤平的狀態,不像儲存在 HashTable 那樣是用 Singly Linked List 的方式將各個 node 串接起來。