JavaScript数据结构之散列表怎么创建(javascript,开发技术)

时间:2024-04-30 14:36:33 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    JavaScript%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B9%8B%E6%95%A3%E5%88%97%E8%A1%A8%E6%80%8E%E4%B9%88%E5%88%9B%E5%BB%BA

有时候一些键会有相同的散列值。比如aabbaa,从字符串的角度来说它们是不同的值,但是按照我们的散列函数逻辑,将每个字母的 Unicode 码累加得出的散列值,一定是一样的。

我们知道在 JavaScript 对象当中,如果赋值时指定的 key 已存在,那么就会覆盖原有的值,比如这个例子:

为了避免上述代码中出现的风险,我们需要想办法处理,如何使key != key,则hash != hash

目前可靠的方法有两个,分别是:分离链接线性探查

分离链接法是指在散列表存储数据时,value 部分用链表来代替之前的键值对。键值对只能存储一个,而链表可以存储多个键值对。如果遇到相同的散列值,则在已有的链表中添加一个键值对即可。

我们需要重写三个方法:put、get 和 remove。我们看如何实现:

首先还是基本的类结构,然后看put方法:

LinkedList 类是标准的链表类,在链表篇讲过如何实现,这里直接使用

对比上篇的散列表 put 方法,你会发现差别不大,变化的部分如下:

优化后的逻辑是,在存储数据时,将键值对存在一个链表里。如果有相同的hash值,则向已有的链表中添加一个键值对,这样就避免了覆盖。

不过这种方式也有弊端,每添加一个键值对就要创建一个链表,会增加额外的内存空间。

get 方法:

新的 get 方法明显比之前的复杂了许多。主要逻辑是根据 key 找到一个链表,然后再遍历链表找到与参数 key 相匹配的键值对,最后返回找到的值。

while 循环中使用 return 可以直接中止当前函数

本文:JavaScript数据结构之散列表怎么创建的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Git工作流模式及命令怎么使用下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18