JS 实现 HashMap
HashMap代码(这种实现方式是错误的,错误原因:代码中_map、_length变量是HashMap的所有实例共用的):


/**
* HashMap
* 2021年09月09日
*/ (function (global) {
var _map;
var _length; global.HashMap = function () {
_map = {};
_length = 0;
}; global.HashMap.prototype = {
put: function (key, value) {
if (!_map.hasOwnProperty(key)) {
_length++;
}
_map[key] = value;
}, get: function (key) {
if (_map.hasOwnProperty(key)) {
return _map[key];
}
return null;
}, containsKey: function (key) {
return _map.hasOwnProperty(key);
}, size: function () {
return _length;
}, remove: function (key) {
if (_map.hasOwnProperty(key)) {
_length--;
return delete _map[key];
}
return false;
}, removeAll: function () {
_map = {};
}, keys: function () {
var keys = [];
for (var item in _map) {
keys.push(item);
}
return keys;
}, values: function () {
var values = [];
for (var item in _map) {
values.push(_map[item]);
}
return values;
}
}; global.HashMap.prototype.constructor = global.HashMap; })(window);
HashMap代码(正确的实现):


/**
* HashMap
* 2021年09月09日
*/ HashMap = function () {
this._length = 0;
this._map = {};
}; HashMap.prototype = {
put: function (key, value) {
if (!this._map.hasOwnProperty(key)) {
this._length++;
}
this._map[key] = value;
}, get: function (key) {
if (this._map.hasOwnProperty(key)) {
return this._map[key];
}
return null;
}, containsKey: function (key) {
return this._map.hasOwnProperty(key);
}, size: function () {
return this._length;
}, remove: function (key) {
if (this._map.hasOwnProperty(key)) {
this._length--;
return delete this._map[key];
}
return false;
}, removeAll: function () {
this._length = 0;
this._map = {};
}, keys: function () {
var keys = [];
for (var item in this._map) {
keys.push(item);
}
return keys;
}, values: function () {
var values = [];
for (var item in this._map) {
values.push(this._map[item]);
}
return values;
}
}; HashMap.prototype.constructor = HashMap;
测试代码:


<!DOCTYPE html>
<html>
<head>
<title>HashMap测试</title> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <style type="text/css">
</style> <script type="text/javascript" src="jquery-1.7.1.js"></script>
<script type="text/javascript" src="hashmap.js"></script> </head>
<body>
<input type="button" value="测试1" onclick="testHashMap()" />
<input type="button" value="测试2" onclick="testArray()" />
<div id="div" style="height:800px;"></div> <script type="text/javascript">
var n = 100000;
var div = $("#div"); //测试数据
debugger;
var list = [];
var map = new HashMap();
for (var i = 1; i <= n; i++) {
var val = Math.floor(Math.random() * n);
var key = "key" + val; if (!map.containsKey(key)) {
map.put(key, val);
list.push({ key: key, value: val });
}
}
div.append("测试数据初始化完成,数据量:Array " + list.length + ",HashMap " + map.size() + "<br />"); //测试HashMap
function testHashMap() {
var t1 = new Date().getTime(); var sum = 0;
var count = 0;
for (var i = 20000; i <= 21000; i++) {
var key = "key" + i; if (map.containsKey(key)) {
var num = map.get(key);
count++;
sum += num;
}
} var t2 = new Date().getTime(); div.append("完成,结果:sum=" + sum + ",count=" + count + "耗时" + (t2 - t1).toString() + "毫秒<br />");
} //测试Array
function testArray() {
var t1 = new Date().getTime(); var sum = 0;
var count = 0;
for (var i = 20000; i <= 21000; i++) {
for (var k = 0; k < list.length; k++) {
var key = "key" + i;
var item = list[k]; if (item.key == key) {
count++;
sum += item.value;
}
}
} var t2 = new Date().getTime(); div.append("完成,结果:sum=" + sum + ",count=" + count + "耗时" + (t2 - t1).toString() + "毫秒<br />");
} </script>
</body>
</html>
JS 实现 HashMap的更多相关文章
- JS实现HashMap
/** * ********* 操作实例 ************** * var map = new HashMap(); * map.put("key1","Valu ...
- 学习Redis你必须了解的数据结构——HashMap实现
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接博客园蜗牛 cnblogs.com\tdws . 首先提供一种获取hashCode的方法,是一种比较受欢迎的方式,该方法参照了一位园友的 ...
- JavaScript——HashMap实现
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接博客园蜗牛 cnblogs.com\tdws . 首先提供一种获取hashCode的方法,是一种比较受欢迎的方式,该方法参照了一位园友的 ...
- 信息系统实践手记6-JS调用Flex的性能问题一例
说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统 ...
- vue-cli +echarts-amap集成echarts和高德地图TypeError: Cannot read property 'dataToPoint' of null解决方案
由于项目的需求,需要做一种迁徙效果, 最后我们采用了组件化开发,可以说这个坑自己一个人踩,有点累,但也收获不少. vue-cli +echarts-amap集成echarts和高德地图,出现报错,错误 ...
- getparameter的使用
在做项目的过程中,会遇到跳转的页面,直接打开到里面的子项,这个时候,看了UI给我设计了四个页面,如果做四个页面,肯定是可以实现的.但是这个不符合前端的设计.就在想通过点击传值进去,肯定是能够获取到的. ...
- 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例
layout: post title: 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例 key: 20160425 tags: GIS JS FLEX 技术选型 性能 API ...
- JS hashMap实例详解
链接:http://www.jb51.net/article/85111.htm JS hashMap实例详解 作者:囧侠 字体:[增加 减小] 类型:转载 时间:2016-05-26我要评论 这篇文 ...
- js数组,数字函数,字符串函数,表单验证,hashMap,堆栈,日期函数,call函数
1.javascript的数组API Js代码 收藏代码 //定义数组 var pageIds = new Array(); pageIds.push('A'); 数组长度 pageIds.lengt ...
- js hashMap
/** * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, ...
随机推荐
- 关于点赞业务对MySQL和Redis和MongoDB的思考
点赞 在我个人理解中,点赞业务比较频繁,很多人业务可能都会有这个,比如:博客,视频,文章,动态,评论等,但是不应该是核心业务,不应该大量地请求MySQL数据库,给数据库造成大量的资源消耗,MySQ ...
- 使用C#将几个Excel文件合并去重分类
需要将几个Excel表格里面的数据去重,然后将每个站点的数据另存为一张Sheet上. 几个表格如下所示: 实现效果如下所示: 具体实现 需要使用EPPlus操作Excel 安装EPPlus如下所示: ...
- 用友NC产品接口开发,通过轻易云数据集成平台快速调用
通过用友NC产品的 UAP V63平台.插件相关处理.相关业务逻辑处理课程目标与要求课程内容课程目标与要求业务逻辑处理外部系统信息设置节点新建外部系统默认匹配规则:仅按对照表:外部系统数据与UAP.接 ...
- 【python】Tkinter学习
定义 python自带的可编辑的GUI界面,是一个图像窗口. Tkinter是使用python进行窗口视窗设计的模块. 标签-按钮 2.1.Lable&Button标签和按钮 定义window ...
- python循环语句(二)
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 知识点:for循环的语法格式如下: for iterating_var in sequence: statements(s) ...
- 【matlab混沌理论】1.1.混沌理论简介
混沌理论 1.简介 混沌理论是一个跨学科的科学研究领域和数学分支,专注于对初始条件高度敏感的动力系统的基本模式和确定性定律,曾被认为具有完全随机的无序和不规则状态.混沌理论指出,在混 ...
- erp——绩效考核系统——数据需求说明书
绩效考核--数据需求说明书 1.引言 1.1编写目的 数据要求说明书详细的提供了系统中各个数据的流向,是设计数据库的关键所在,为以后的编码以及测试提供一份可靠的依据. 1.2 对象 本<数据要求 ...
- 安装NETDATA集群监控面板
安装NETDATA集群监控面板 介绍 官方链接 演示网页:https://my-netdata.io/ 官方首页:http://netdata.cloud/ 文档地址:http://docs.netd ...
- 【Postman&JMeter】使用Postman和JMeter进行signature签名
使用Postman和JMeter进行signature签名 目录 使用Postman和JMeter进行signature签名 一.前言 二.v0接口 1.Postman 2.JMeter 三.v1接口 ...
- NetSuite 开发日记 —— 库存详细信息记录更改数量问题
详细报错: "type":"error.SuiteScriptError","name":"USER_ERROR",&q ...