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


相关推荐

  • 谷歌学术使用方法_想用谷歌浏览器怎么办

    谷歌学术使用方法_想用谷歌浏览器怎么办谷歌学术简明使用说明源PDF文件下载链接:https://github.com/zjcao/books/blob/master/google_scholar_instructions.pdf

    2022年10月11日
    2
  • java 多态[通俗易懂]

    java 多态[通俗易懂]多态的情况下,子父类存在同名的成员变量或成员方法优先调用问题1.多态的情况下,子父类存在同名的成员变量时,默认访问的是父类的成员变量数据.2.多态的情况下,子父类存在同名的非静态函数的时候,默认是调用子类的成员函数.3.多态的情况下,子父类存在同名的静态函数时,默认是调用父类的成员函数.原因:java多态的实现,首先说成员变量,因为在java中,一个对象实例是存储在堆中的,而这个对象包含的内容有对象头,对象体以及对其字节,首先对象头存放的是对象运行时的数据,像是hashcode,锁标识,类型指针,

    2022年7月7日
    24
  • Java 构造函数的详解

    Java 构造函数的详解我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的。那么我们在java里面怎么在对象一旦创建就赋值呢?1.构造方法的作用:构造方法作用:对对象进行初始化.如图:2.构造函数与普通函数的区别:(1). 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初

    2022年7月8日
    23
  • console.log 用法

    console.log 用法

    2021年10月11日
    130
  • python生成时间戳_Python 获取时间戳

    python生成时间戳_Python 获取时间戳importtimetime_tup=time.localtime(time.time())printtime_tupformat_time=’%Y-%m-%d_%a_%H-%M-%S’cur_time=time.strftime(format_time,time_tup)printcur_time参考:https://blog.csdn.net/a542551042/articl…

    2022年10月3日
    1
  • Sublime Text3 的 Markdown 实时预览全面总结

    Sublime Text3 的 Markdown 实时预览全面总结如前文《SublimeText3的插件管理工具(PackageControl)的安装及使用方法》所说,Sublime有强大的插件扩展功能,本文介绍如何在用Sublime写Markdown文档时,做到效果预览。1.插件介绍先介绍两个有关Markdown的常用插件:MarkdownEditing和MarkdownPreviewMarkdownEditing顾名思义,Ma…

    2022年7月27日
    2

发表回复

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

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