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的更多相关文章

  1. JS实现HashMap

    /** * ********* 操作实例 ************** * var map = new HashMap(); * map.put("key1","Valu ...

  2. 学习Redis你必须了解的数据结构——HashMap实现

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接博客园蜗牛 cnblogs.com\tdws . 首先提供一种获取hashCode的方法,是一种比较受欢迎的方式,该方法参照了一位园友的 ...

  3. JavaScript——HashMap实现

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接博客园蜗牛 cnblogs.com\tdws . 首先提供一种获取hashCode的方法,是一种比较受欢迎的方式,该方法参照了一位园友的 ...

  4. 信息系统实践手记6-JS调用Flex的性能问题一例

    说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统 ...

  5. vue-cli +echarts-amap集成echarts和高德地图TypeError: Cannot read property 'dataToPoint' of null解决方案

    由于项目的需求,需要做一种迁徙效果, 最后我们采用了组件化开发,可以说这个坑自己一个人踩,有点累,但也收获不少. vue-cli +echarts-amap集成echarts和高德地图,出现报错,错误 ...

  6. getparameter的使用

    在做项目的过程中,会遇到跳转的页面,直接打开到里面的子项,这个时候,看了UI给我设计了四个页面,如果做四个页面,肯定是可以实现的.但是这个不符合前端的设计.就在想通过点击传值进去,肯定是能够获取到的. ...

  7. 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例

    layout: post title: 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例 key: 20160425 tags: GIS JS FLEX 技术选型 性能 API ...

  8. JS hashMap实例详解

    链接:http://www.jb51.net/article/85111.htm JS hashMap实例详解 作者:囧侠 字体:[增加 减小] 类型:转载 时间:2016-05-26我要评论 这篇文 ...

  9. js数组,数字函数,字符串函数,表单验证,hashMap,堆栈,日期函数,call函数

    1.javascript的数组API Js代码 收藏代码 //定义数组 var pageIds = new Array(); pageIds.push('A'); 数组长度 pageIds.lengt ...

  10. js hashMap

    /** * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, ...

随机推荐

  1. 递归与分治思想:治思想 && 折半查找法(迭代 && 递归)

    1 //分治思想:将大问题拆成小问题逐一解决 2 //折半查找法:不断缩小一半查找的范围,知道达到目的,效率较高. 详情见:https://fishc.com.cn/thread-27964-1-1. ...

  2. 由后缀表达式题目:stoi atoi 函数新发现

    洛谷上的题:有些·表示一个操作结束~假装没看到 1 #include<iostream> 2 #include<stack> 3 #include<string> ...

  3. JAVA中的函数接口,你都用过吗

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 在这篇文章中,我们将通过示例来学习 Java 函数式接口. 函数式接口的特点 只包含一个抽象方法的接口称为函数式接口. 它 ...

  4. 【Android】使用litepal实现数据库的创建和升级

    1.配置litepal 配置过程见:2.进行创建和升级数据库,可以省略sql语句的录入 定义一个Note类,代码如下 接下来将note类添加到映射模型列表当中,修改litepal.xml中的代码.如下 ...

  5. IDEA提示无法解析resourse中的方法getResourceAsStream

    一.解决方案 1.错误展示: InputStream inputStream = Resources.getResourceAsStream(resource); 2.报错展示: 报错原因:这是因为找 ...

  6. vue + node 前后端分离项目解决跨域问题

    vue + node 前后端分离项目解决跨域问题 由于前端 和 后端 项目运行于不同端口,无法直接传递数据 后端 app.js 添加如下代码 var cors = require('cors') ap ...

  7. serdes 复制时钟

    serdes复制时钟一般指的是,将rx lane的CDR 恢复时钟发送给TX/PLL, 这样rx和tx的时钟频偏就一致,在远端环回时经常用到.RX,TX时钟同频后环回数据就可以畅通发出去,否则RX/T ...

  8. KR4-KP4

    serdes测试中经常遇到KR4 和KP4, KR4指的是FEC 528 514对应25X4的100G KP4对应FEC 544 514,56/100x4 的200/400G链路 KP4应用比较广泛, ...

  9. bash shell笔记整理——head命令

    作用 我直接搬运官方英文了,这英文真的简单直白了,我英语辣鸡...毕竟我学历不行,觉得翻译不好就直接自己来吧.. Print the first 10 lines of each FILE to st ...

  10. 面试官:说说MVCC的执行原理?

    MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于解决数据库并发访问中,数据一致性问题.它通过在读写操作期间保存多个数据版本,以提供并发事务间的隔离 ...