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)

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Interp1 c++实现

    Interp1 c++实现在网上找了一下,有是有但是我下载下来用的时候结果不对。想修改一下但是搞得迷迷糊糊的,就干脆写了一个,不过只有最简单的线性插值的实现,新手可以直接拿过去用。也希望老鸟也可以不吝赐教,提高一下效率或者优化下结构。cpp文件//—————————————————————————#pragmahdrstop#include”Interpfun.h”//————————

  • java excel转json[通俗易懂]

    java excel转json[通俗易懂]packagecom.xmg.excel;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.net.URL;import…

  • 三种线程安全的单例模式(哪些集合是线程安全的)

    三种线程安全的单例模式(哪些集合是线程安全的)在单线程开发环境中,我们经常使用ArrayList作容器来存储我们的数据,但它不是线程安全的,在多线程环境中使用它可能会出现意想不到的结果。多线程中的ArrayList:我们可以从一段代码了解并发环境下使用ArrayList的情况:publicclassConcurrentArrayList{publicstaticvoidmain(String[]args)throwsInterruptedException{List<Integer>l

  • Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义

    Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义

  • 怎么新建pytest的ini文件_qt读写配置文件

    怎么新建pytest的ini文件_qt读写配置文件前言pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行查看pytest.ini的配置选项pytest-h找到以下

  • Windows Mobile 6 Professional SDK[通俗易懂]

    Windows Mobile 6 Professional SDK[通俗易懂]WindowsMobile6ProfessionalSDK Lotyong的WindowsMobile6ProfessionalSDKhttp://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%

发表回复

您的电子邮箱地址不会被公开。

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