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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows Server 2016 检查更新时,错误代码8024401C 的解决方案 …

    Windows Server 2016 检查更新时,错误代码8024401C 的解决方案 …这个问题的核心是连接不到更新服务器,有多种解决方案(如给SoftwareDistribution改名、疑难解答等),还有一部分情况是因为IPV6导致,关闭IPV6即可解决。如果其他办法都不好用可以试试这个~WindowsServer关闭ipv6的办法:开始->运行->输入Regedit进入注册表编辑器定位到:[HKEY_…

    2022年6月10日
    48
  • 10.20卸载tensorflow2.0,安装tensorflow1.14.0

    10.20卸载tensorflow2.0,安装tensorflow1.14.0这里写自定义目录标题卸载tensorflow2.0安装1.14.0卸载tensorflow2.0安装1.14.0已安装python版本3.8.5,最开始误按装了tensorflow2.0,发现2.0和1.0版本语句不兼容,解决办法:tensorflow版本问题(1版本和2版本语句不兼容)当我们在tensorflow2.0版本上写的语句是1.0的格式时,可能会报错。这时只修改两条语句,就可以覆盖全部语句,不需要再担心。下面展示一些内联代码片。//Acodeblockvarfoo=

    2022年6月22日
    41
  • 通过JS给HTML元素增加、删除和获取属性内容

    通过JS给HTML元素增加、删除和获取属性内容

    2021年11月10日
    46
  • Batch Normalization批量归一化[通俗易懂]

    Batch Normalization批量归一化[通俗易懂]深度学习捷报连连、声名鹊起,随机梯度下降成了训练深度网络的主流方法。尽管随机梯度下降法对于训练深度网络简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化、权重衰减系数、Dropout比例等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。那么学完这篇文献之后,你可以不需要那么刻意的慢慢调整参数。批量标准化一般用在非线性…

    2022年8月31日
    12
  • jre环境变量配置_Windows系统配置Java环境变量

    jre环境变量配置_Windows系统配置Java环境变量一、到达环境变量配置页面从路径:桌面->控制面板->系统和安全->系统,到达系统,点击左侧“高级系统设置”,再点击“环境变量”。方法1:在桌面上右键“此电脑”,选择属性,直接到达系统(桌面无“此电脑”或“控制面板”的同学可选择方法2),然后点击“高级系统设置”,再点击“环境变量”,到达配置页面。123方法2:1点击窗口,选择设置2搜索并…

    2022年7月8日
    181
  • Scikit中的特征选择,XGboost进行回归预测,模型优化的实战

    Scikit中的特征选择,XGboost进行回归预测,模型优化的实战前天偶然在一个网站上看到一个数据分析的比赛(sofasofa),自己虽然学习一些关于机器学习的内容,但是并没有在比赛中实践过,于是我带着一种好奇心参加了这次比赛。赛题:足球运动员身价估计比赛概述本比赛为个人练习赛,主要针对于于数据新人进行自我练习、自我提高,与大家切磋。练习赛时限:2018-03-05至2020-03-05任务类…

    2022年4月28日
    56

发表回复

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

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