JS实现常见数据结构:哈希表[通俗易懂]

哈希表特点:存储键值对的数据结构,哈希表内部是使用一个hash函数把传入的键转换成一串数字,而这串数字将作为键值对实际的key,通过这个key查询对应的value非常快。哈希表方法:1.add:添加一组键值对。2.remove:删除一组键值对。3.lookup:查找一个键对应的值。

大家好,又见面了,我是你们的朋友全栈君。

绪论

哈希表特点: 存储键值对的数据结构,哈希表内部是使用一个hash函数把传入的键转换成一串数字,而这串数字将作为键值对实际的key,通过这个key查询对应的value非常快。
哈希表方法:

  1. add:添加一组键值对。
  2. remove:删除一组键值对。
  3. lookup:查找一个键对应的值。

正文

<!DOCTYPE html>
<div lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>index</title>
    <script src="js/jquery-2.2.4.min.js"></script>
    <style> </style>
</head>

<body>

</body>
<script> $(document).ready(function () { 
     var hashTable = new myHashTable(); hashTable.add(1, 10); hashTable.add(2, 20); hashTable.add(3, 30); hashTable.add(4, 40); hashTable.add(2, 25); hashTable.add(null, 250); hashTable.add(undefined, 251); console.log('内容:' + hashTable.show()); hashTable.remove(3); console.log('内容:' + hashTable.show()); console.log('value:' + hashTable.lookup(2)); console.log('value:' + hashTable.lookup(3)); }); function hash(str, max) { 
     var hash = 0; var string = new String(str); for (var i = 0; i < string.length; i++) { 
     hash += string.charCodeAt(i); } return hash % max; } function myHashTable() { 
     var arr = []; var MAX = 4; // 添加一组键值对 this.add = function(k, v) { 
     if (k === null || k === undefined) { 
     return; } var index = hash(k, MAX); if (arr[index] === undefined) { 
     arr[index] = [[k, v]]; } else { 
     var b = !!0; for (var i = 0; i < arr[index].length; i++) { 
     if (arr[index][i][0] === k) { 
     arr[index][i][1] = v; b = !0; } } if (!b) { 
     arr[index].push([k, v]); } } }; // 删除一组键值对 this.remove = function(k) { 
     var index = hash(k, MAX); if (arr[index].length === 1 && arr[index][0][0] === k) { 
     delete arr[index]; } else { 
     for (var i = 0; i < arr[index].length; i++) { 
     if (arr[index][i][0] === k) { 
     delete arr[index][i]; } } } }; // 查找一个键对应的值 this.lookup = function(k) { 
     var index = hash(k, MAX); if (arr[index] === undefined) { 
     return undefined; } else { 
     for (var i = 0; i < arr[index].length; i++) { 
     if (arr[index][i][0] === k) { 
     return arr[index][i][1]; } } } }; // 展示 this.show = function() { 
     return arr; }; } </script>

</div>

结果

在这里插入图片描述
(若有什么错误,请留言指正,3Q)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128984.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • slf4j如何使用_正确刷牙方法图解

    slf4j如何使用_正确刷牙方法图解环境说明Windows101803IDEA2018.2.EAPMaven3.5.2这是正文POM文件&lt;!–https://mvnrepository.com/artifact/org.projectlombok/lombok–&gt;&lt;dependency&gt;&lt;groupId&g…

    2022年9月5日
    3
  • phpstrom2021.4.2最新激活码_通用破解码

    phpstrom2021.4.2最新激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    35
  • cuda 卸载_ubuntu怎么卸载cuda

    cuda 卸载_ubuntu怎么卸载cudahttps://blog.csdn.net/Teeyohuang/article/details/81052770cuda删除有效版本

    2022年9月6日
    2
  • 这是一篇日记而已

    这是一篇日记而已2018年6月27日                                          星期三                                       晴(巨热)刚刚装订好C++的课设报告,瞬间感觉轻松了不少,因为今天四点顺利的考完了并行计算,加上周二交上的十五六页Oracle结课报告,本学期的三门选修课都已经顺利结课。从明天起,基本上已经进入了没课…

    2022年5月7日
    37
  • 普通索引与唯一索引的区别_唯一索引怎么设置

    普通索引与唯一索引的区别_唯一索引怎么设置所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条记录。普通索引还是唯一索引?假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会…

    2022年9月20日
    0
  • sm2和sm4加密算法浅析

    sm2和sm4加密算法浅析sm2和sm4加密算法浅析一:SM2简介:SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC256位(SM2采用的就是ECC256位的一种)安全强度比RSA2048位高,但运算速度快于RSA。SM2和RSA算法比较SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小①:加密算法以及流程:输入:需要发送的消息为比特串M,klen为M的比特

    2022年10月6日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号