js实现数据结构--散列表

散列表(Hash Table)是一种根据键值直接访问的数据结构,通过散列函数将关键码映射到数组位置,加快查找速度。本文介绍了散列表的特点、作用,并展示了在JavaScript中如何定义散列表、实现散列函数以及添加、移除和检索值的基本方法,通过实例演示了散列表的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是散列表?

散列表(Hash table)也叫哈希表,是根据关键码值(Key value,键值)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

散列表的特点:

  • 散列表中的每个元素有一个键值和键值所对应的数值
  • 查找散列表中的元素必须得首先根据键值,通过散列函数找到元素所在的位置才能访问到

散列表的作用:

散列表的作用就是尽可能快地在数据结构中找到一个值。

js实现散列表的定义及基本方法:

首先定义一个散列表,声明该结构的属性,代码如下:

 function HashTable() {
        //定义存放元素的数组
        var  table = [];
                      }

散列表中一个很重要的方法就是散列函数,这是HashTable类中的一个私有方法。在这里的散列函数就是简单地将每个键值中的每个字母的ASCII值相加,具体代码为:

//定义常用的散列函数---简单地将每个键值中的每个字母的ASCII值相加
        var loseloseHashCode = function (key) {
            var hash = 0;  //该变量来存储ASCII值的总和
            for (var i = 0; i < key.length; i++){
                hash += key.charCodeAt(i);
            }
            return hash % 37;
        }

有了散列函数,就可以定义散列表的一些基本方法,如向散列表中添加一个新的项, 根据键值从散列表中移除值以及根据键值检索特定的值,具体代码如下:

        //向散列表中增加一个新的项
        this.put = function (key , value) {
            var position = loseloseHashCode(key);//根据所创建的散列函数计算出键值所在的位置
            console.log(position + '-' + key);
            table[position] = value;  //将value添加到用散列函数计算出的对应的位置上
        }


        //根据键值搜索键值所对应的值
        this.get = function (key) {
            return table[loseloseHashCode(key)];
        }


        //根据键值从散列表中移除该键值所对应的数值
        this.remove = function (key) {
            table[loseloseHashCode(key)] = undefined;
        }

使用散列表:

使用散列表就是简单的调用以上的函数,然后查看输出的结果,具体代码如下:

 var hash = new HashTable();
     hash.put('Tom','tom@163.com');//输出8-Tom
     hash.put('John','john@163.com');//输出29-John
     hash.put('Rose','rose@163.com');//输出2-Rose

     console.log(hash.get('Tom'));//输出tom@163.com
     console.log(hash.get('Rose'));//输出rose@163.com

     hash.remove('John');
     console.log(hash.get('John'));//输出undefined

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值