剧场模式
首页算法其他带领初学者学习数据结构与算法免费视频教程

25 分钟详解使用 JavaScript 实现哈希算法和哈希表

求知小风 · 真仙发布于新课程
1

http://www.woshipm.com/pmd/805326.html

https://www.jianshu.com/p/bf1d7eee28d0

https://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8

function hashStringToInt(s, tableSize) {
  let hash = 17;

  for (let i = 0; i < s.length; i++) {
    hash = (13 * hash * s.charCodeAt(i)) % tableSize;
  }

  return hash;
}

class HashTable {
  table = new Array(3333);
  numItems = 0;

  resize = () => {
    const newTable = new Array(this.table.length * 2);

    this.table.forEach(item => {
      if (item) {
        const idx = hashStringToInt(item[0], newTable.length);
        newTable[idx] = item;
      }
    });

    this.table = newTable;
  };

  getItem = key => {
    const idx = hashStringToInt(key, this.table.length);

    if (!this.table[idx]) {
      return null;
    }

    return this.table[idx][1];
  };

  setItem = (key, val) => {
    this.numItems++;
    const loadFactor = this.numItems / this.table.length;

    if (loadFactor > 0.8) {
      this.resize();
    }

    const idx = hashStringToInt(key, this.table.length);
    this.table[idx] = [key, val];
  };
}

const myTable = new HashTable();
myTable.setItem("firstName", "bob");
myTable.setItem("f", "bob1");
myTable.setItem("firstNafe", "bob2");
myTable.setItem("firstNafe", "bob3");
console.log(myTable.getItem("firstName"));
console.log(myTable.getItem("f"));
console.log(myTable.getItem("firstNafe"));
0 条回复
暂无回复~~
加微信(qiuzhi99666)入群官方服务号
随机课程
带领初学者学习数据结构与算法免费视频教程

带领初学者学习数据结构与算法免费视频教程

2 个视频38 分钟初级

全部免费

其他正在更新新课程

学员(23)
小猪佩奇 · 真仙YunZhi · 大乘hk5518 · 元婴你坑到我了 · 太乙beibei0829 · 道祖kuckboy1994 · 太乙kennx · 太乙zsh19950920 · 真仙锦恒科技 · 真仙Jean · 道祖等风来 · 元婴帅神orz · 大乘
最新动态
小猪佩奇 · 真仙学习到了24:02
YunZhi · 大乘学习到了0:00
hk5518 · 元婴学习到了26:23
你坑到我了 · 太乙学习到了26:10
beibei0829 · 道祖学习到了26:10
统计信息
    学员: 15699
    视频数量: 915
    帖子数量: 406

© 汕尾市求知科技有限公司 | 粤ICP备19038915号 | 在线学员:139

Top