HashTable class - Node.js Data Structure

Node.js examples for Data Structure:Hash Table

Description

HashTable class

Demo Code


function HashTable(size) {
  this.buckets = Array(size);/* w w w . j  a v  a 2s .c o  m*/
  this.numBuckets = this.buckets.length;
}

function HashNode(key, value, next) {
  this.key = key;
  this.value = value;
  this.next = next || null;
}

HashTable.prototype.hash = function(key) {
  var total = 0;
  for (var i = 0; i < key.length; i++) {
    total += key.charCodeAt(i);
  }
  var bucket = total % this.numBuckets;
  return bucket;
};

HashTable.prototype.insert = function(key, value) {
  var index = this.hash(key);
  if(!this.buckets[index]) {
    this.buckets[index] = new HashNode(key,value);
  } else if (this.buckets[index].key === key){
    this.buckets[index].value = value;
  }else {
    var currentNode = this.buckets[index];
    while (currentNode.next) {
      if(currentNode.next.key === key) {
        currentNode.next.value = value;
        return;
      }
      currentNode = currentNode.next;
    }
    currentNode.next = new HashNode(key,value);
  }
}

HashTable.prototype.get = function(key) {
  var index = this.hash(key);
  if (!this.buckets[index]) return null;
  else {
    var currentNode = this.buckets[index];
    while(currentNode) {
      if (currentNode.key === key) return currentNode.value;
      currentNode = currentNode.next;
    }
    return null;
  }
};

HashTable.prototype.retrieveAll = function() {
  var allNodes = [];
  
   for (var i = 0; i < this.numBuckets; i++) {
     var currentNode = this.buckets[i];
     while(currentNode) {
       allNodes.push(currentNode);
       currentNode = currentNode.next;
     }
   }
   return allNodes;
}

var myHT = new HashTable(30);

myHT.insert('Dean', 'dean@gmail.com');
myHT.insert('Megan', 'megan@gmail.com');
myHT.insert('Dane', 'dane@yahoo.com');
myHT.insert('Dean', 'deanmachine@gmail.com');
myHT.insert('Megan', 'megansmith@gmail.com');
myHT.insert('Dane', 'dane1010@outlook.com');
myHT.insert('Joe', 'joey@facebook.com');
myHT.insert('Samantha', 'sammy@twitter.com');


// console.log(myHT.buckets);
// console.log(myHT.get('Dane'))
console.log(myHT.retrieveAll());

Related Tutorials