ES6 Map原理是什么
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"ES6 Map原理是什么",在日常操作中,相信很多人在ES6 Map原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ES6 Map原理是什么"
千家信息网最后更新 2025年01月19日ES6 Map原理是什么
这篇文章主要介绍"ES6 Map原理是什么",在日常操作中,相信很多人在ES6 Map原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ES6 Map原理是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Map利用链表,hash的思想来实现。
首先,Map可以实现删除,而且删除的数据可以是中间的值。而链表的优势就是在中间的任意位置添加,删除元素都非常快,不需要移动其他元素,直接改变指针的指向就可以。
而在存储数据很多的情况下,会导致链条过长,导致查找效率慢,所以我们可以创建一个桶(存储对象的容器),根据hash(把散列的值通过算法变成固定的某值)来平局分配数据,防止链条过长。
如下图:桶里面有3个位置,每一个位置都是一个对象,通过next属性指向下一个对象来把没有关联的对象联到一起。
把Map属性值和属性名都存到对象的值里。
简单模拟Map,代码如下:
function Mymap() { //构造函数 this.init();}//初始化函数,创建桶(数组),每个位置都是一个对象,每个对象的属性上设置next属性,并且初始化为null。Mymap.prototype.init = function () { this.tong = new Array(8); for (var i = 0; i < 8; i++) { this.tong[i] = new Object(); this.tong[i].next = null; }};//添加数据。Mymap.prototype.set = function (key, value) { var index = this.hash(key); //获取到当前设置的key设置到那个位置上 var TempBucket = this.tong[index]; //获取当前位置的对象 while (TempBucket.next) { //遍历如果当前对象链接的下一个不为空 if (TempBucket.next.key == key) { //如果要设置的属性已经存在,覆盖其值。 TempBucket.next.value = value; return; //return ,不在继续遍历 } else { TempBucket = TempBucket.next; //把指针指向下一个对象。 } } TempBucket.next = { //对象的next是null ,添加对象。 key: key, value: value, next: null }};//查询数据Mymap.prototype.get = function (key) { var index = this.hash(key); var TempBucket = this.tong[index]; while(TempBucket){ if(TempBucket.key == key){ return TempBucket.value; }else{ TempBucket = TempBucket.next; } } return undefined;}//删除数据Mymap.prototype.delete = function(key){ var index = this.hash(key); var TempBucket = this.tong[index]; while(TempBucket){ if(TempBucket.next.key == key){ TempBucket.next = TempBucket.next.next; return true; }else{ TempBucket = TempBucket.next; } }}//看当前属性是否存在Mymap.prototype.has = function(key){ var index = this.hash(key); var TempBucket = this.tong[index]; while(TempBucket){ if(TempBucket.key == key){ return true; }else{ TempBucket = TempBucket.next; } } return false;}//清空这个mapMymap.prototype.clear = function(){ this.init();}//使设置的属性平均分配到每个位置上,使得不会某个链条过长。Mymap.prototype.hash = function (key) { var index = 0; if (typeof key == "string") { for (var i = 0; i < 3; i++) { index = index + isNaN(key.charCodeAt(i)) ? 0 : key.charCodeAt(i); } } else if (typeof key == 'object') { index = 0; } else if (typeof key == 'number') { index = isNaN(key) ? 7 : key; } else { index = 1; } return index % 8;}var map = new Mymap(); //使用构造函数的方式实例化mapmap.set('name','zwq');map.get('name');map.has('name);
到此,关于"ES6 Map原理是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
对象
属性
位置
数据
原理
学习
函数
指向
链条
元素
指针
更多
分配
存储
帮助
实用
接下来
个位
代码
优势
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
思迅数据库主机更换
学软件开发学不会怎么办
诛仙3客户端更新服务器连接失败
怎么查网易邮箱服务器ip
如何连接局域网数据库
网络安全条例详细解析
b次元的服务器在哪
电脑成服务器安全吗
深度系统做软件开发
太平洋做软件开发怎么样
激活http代理服务器
低维数据库
苏州互联网科技公司
怀旧服联盟服务器最大上限
优势的直销软件开发
湖南创新网络技术服务信息中心
建模软件开发入口
r星在线服务器已暂时停用
服务器可以装多大内存
无线传感网络技术与应用图片
互联网新兴科技股票
广东应用软件开发中心
网络安全条例详细解析
传文件服务器浪潮云
程序如何部署到服务器上
网络安全专家谈心灵鸡汤
下载数据库与系统
计算机网络技术双语
网络安全对网络一词的定义
网络技术应用 目录