数据结构-javascript 实现【散列表】


散列表类似于字典,但其使用散列函数获得地址从而获取数据值。

1. 散列表的方法

put(key, value): 向散列表增加一个新的项

remove(key): 根据键值从散列表中移除值

get(key): 返回根据键值检索到的值

2. 散列表的实现

class HashTable {
  constructor(){
    this.table = [];
  }

  _loseloseHashCode(key) {
    let hash = 0;
    for (let i =0; i< key.length; i++){
      hash += key.charCodeAt(i);
    }
    return hash;
  }

  _djb2HashCode(key){
    let hash = 5381;
    for (let i = 0; i < key.length; i ++){
      hash = hash * 33 + key.charCodeAt(i);
    }
    return hash % 1013;
  }

  hash(key) {
    return this._djb2HashCode(key);
  }

  put(key, value) {
    const position = this.hash(key);
    this.table[position] = value;
  }

  get(key) {
    return this.table[this.hash(key)];
  }

  remove(key) {
    this.table[this.hash(key)] = undefined;
  }
}

const hash = new HashTable();
hash.put('lucy', 'lucy@126.com');
hash.put('jack', 'jack@126.com');
hash.put('mike', 'mike@126.com');
console.log(hash.get('lucy')); // 'lucy@126.com'
hash.remove('lucy');
console.log(hash.get('lucy')); // undefined