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 串接起來。
Reference Link