字典和散列表

本文深入探讨字典和散列表的概念,包括它们如何存储数据和实现方式。重点介绍了散列冲突的解决策略,如分离链接和线性探查,并讨论了创建高效散列函数的重要性。此外,还提到了JavaScript中的WeakMap和WeakSet类,强调其性能优势和使用场景。
摘要由CSDN通过智能技术生成

集合、字典和散列表可以存储不重复的值。在集合中,我们感兴趣的是每个值本身,并把它 当作主要元素。在字典中,我们用[键,值]的形式来存储数据。在散列表中也是一样(也是以[键, 值]对的形式来存储数据)。但是两种数据结构的实现方式略有不同

字典

字典和集合很相似,集合以[值,值]的形式存储元素,字 典则是以[键,值]的形式来存储元素。字典也称作映射。

实现一个字典类

function Dictionary(){
   

    var items = {
   };

    this.set = function(key, value){
   
        items[key] = value; //{1}
    };

    this.delete = function(key){
   
        if (this.has(key)){
   
            delete items[key];
            return true;
        }
        return false;
    };

    this.has = function(key){
   
        return items.hasOwnProperty(key);
        //return value in items;
    };

    this.get = function(key) {
   
        return this.has(key) ? items[key] : undefined;
    };

    this.clear = function(){
   
        items = {
   };
    };

    this.size = function(){
   
        return Object.keys(items).length;
    };

    this.keys = function(){
   
        return Object.keys(items);
    };

    this.values = function(){
   
        var values = [];
        for (var k in items) {
   
            if (this.has(k)) {
   
                values.push(items[k]);
            }
        }
        return values;
    };

    this.each = function(fn) {
   
        for (var k in items) {
   
            if (this.has(k)) {
   
                fn(k, items[k]);
            }
        }
    };

    this.getItems = function(){
   
        return items;
    }
}

散列表

散列算法的作用是尽可能快地在数据结构中找到一个值。在之前的章节中,你已经知道如果 要在数据结构中获得一个值(使用get方法),需要遍历整个数据结构来找到它。如果使用散列 函数,就知道值的具体位置,因此能够快速检索到该值。散列函数的作用是给定一个键值,然后 返回值在表中的地址。

散列表的目的是快速查找某个kay在字典中对应的value,其中一种常见的方法是,以数组作为基本数据解构,将每个key中的每个字母的ASCII值相加,然后将这个值作为index,在数组中对应的位置添加value,利用数组在内存中顺序排列的特点,快速查找对应位置的value。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值