用js来实现那些数据结构11(字典)

  我们这篇文章来说说Map这种数据结构如何用js来实现,其实它和集合(Set)极为类似,只不过Map是【键,值】的形式存储元素,通过键来查询值,Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以是任何引用类型的数据,但key不能重复,而集合以【值,值】的形式存储元素。字典也可以叫做映射。在ES6中同样新增了Map这种数据结构。我们今天要实现的Map跟前面所实现的Set是十分相似的。只不过在对应的映射关系时会有些修改。

  那么这篇文章我们快速的完成Map类的相关代码:

function Map () {
    var items = {};

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

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

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

        return false;
    }

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

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

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

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

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

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

var map = new Map();

map.set("zak","fat");
map.set("lily","thin");
map.set("david","big");
map.set("jams","small");

console.log(map.has("jams"));//true
console.log(map.has("zaking"));//false

console.log(map.size());//4
console.log(map.keys());//["zak", "lily", "david", "jams"]
console.log(map.values());//["fat", "thin", "big", "small"]
console.log(map.get("zak"));//fat

map.delete("zak");
console.log(map.has("zak"));//false
console.log(map.getItems());//{lily: "thin", david: "big", jams: "small"}

  这样我们就实现了自己的Map类。

  ES6中的Map类,小伙伴们也可以用上面的测试方式来测试ES6原生Map,跟ES6原生的Set堪比兄弟结构。所以这里也不再多说。大家最好自己去敲一遍代码。相信小伙伴们一起学到这里的话,肯定对数据结构不在陌生。其实数据结构的面纱并不神秘。

  这一篇代码着实不多,但是对下面要讲的散列表(hashMap)又十分必要。所以就单独拆出来了一章。独立的简单说明了一番。

  除了后面要讲的散列表外,还剩下两个数据结构要讲讲,那就是树和图, 其中还会加入一些相关算法的介绍和说明。

  然后,hashMap个人觉得十分重要,是一种存储元素及快速查找元素十分便捷一种数据结构。这里不多说。下一篇会详细的讲解hashMap。

  最后,由于本人水平有限,能力与大神仍相差甚远,若有错误或不明之处,还望大家不吝赐教指正。非常感谢!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏屈定‘s Blog

并行设计模式--immutable模式

线程不安全的原因是共享了变量且对该共享变量的操作存在原子性、可见性等问题,因此一种解决思路就是构造不可变的对象,没有修改操作也就不存在并发竞争,自然也不需要额外...

1866
来自专栏Vamei实验室

Java进阶05 多线程

多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式。 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令。单线程好...

2236
来自专栏阿杜的世界

Java Web技术经验总结(十五)

1323
来自专栏程序员的知识天地

最值得你收藏的30个Python常用小技巧!

[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225,...

1322
来自专栏前端知识分享

第63天:json的两种声明方式

1、 对象声明 var  json = {width:100,height:100}

1482
来自专栏数据科学

redis流计算

使用了tornado的异步和streamz的流处理两个库,需要redis 5.0以上版本

2305
来自专栏自学笔记

python基本常识

tuple,str都可以看做是一种list,都可以进行切片操作。 利用切片操作,去掉一个字符串的前后空格。要注意是是前后空格是不止一个的,可能有很多个。

3515
来自专栏向治洪

Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

上篇文章《Android无线开发的几种常用技术》我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到da...

2796
来自专栏崔庆才的专栏

Python操作MongoDB看这一篇就够了

6.4K5
来自专栏Java技术栈

深度历险:Redis 内存模型详解

Redis 是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说 Redis 是实现网站高并发不可或缺的一部分。

1942

扫码关注云+社区

领取腾讯云代金券