js模仿java的Map集合详解


Posted in Javascript onJanuary 06, 2016

java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。
了解完java中的Map后,直接上代码了!

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gbk" /> 
<title>测试map</title> 
</head> 
<style type="text/css"> 
</style> 
<script type="text/javascript"> 
/* 
 * Map对象,实现Map功能 
 * size() 获取Map元素个数 
 * isEmpty() 判断Map是否为空 
 * clear() 删除Map所有元素 
 * put(key, value) 向Map中增加元素(key, value)  
 * remove(key) 删除指定key的元素,成功返回true,失败返回false 
 * get(key) 获取指定key的元素值value,失败返回null 
 * element(index) 获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null 
 * containsKey(key) 判断Map中是否含有指定key的元素 
 * containsValue(value) 判断Map中是否含有指定value的元素 
 * keys() 获取Map中所有key的数组(array) 
 * values() 获取Map中所有value的数组(array) 
 * 
 */ 
function Map(){ 
  this.elements = new Array(); 
  
  //获取Map元素个数 
  this.size = function() { 
    return this.elements.length; 
  }, 
  
  //判断Map是否为空 
  this.isEmpty = function() { 
    return (this.elements.length < 1); 
  }, 
  
  //删除Map所有元素 
  this.clear = function() { 
    this.elements = new Array(); 
  }, 
  
  //向Map中增加元素(key, value)  
  this.put = function(_key, _value) { 
    if (this.containsKey(_key) == true) { 
      if(this.containsValue(_value)){ 
        if(this.remove(_key) == true){ 
          this.elements.push( { 
            key : _key, 
            value : _value 
          }); 
        } 
      }else{ 
        this.elements.push( { 
          key : _key, 
          value : _value 
        }); 
      } 
    } else { 
      this.elements.push( { 
        key : _key, 
        value : _value 
      }); 
    } 
  }, 
  
  //删除指定key的元素,成功返回true,失败返回false 
  this.remove = function(_key) { 
    var bln = false; 
    try {  
      for (i = 0; i < this.elements.length; i++) {  
        if (this.elements[i].key == _key){ 
          this.elements.splice(i, 1); 
          return true; 
        } 
      } 
    }catch(e){ 
      bln = false;  
    } 
    return bln; 
  }, 
  
  //获取指定key的元素值value,失败返回null 
  this.get = function(_key) { 
    try{  
      for (i = 0; i < this.elements.length; i++) { 
        if (this.elements[i].key == _key) { 
          return this.elements[i].value; 
        } 
      } 
    }catch(e) { 
      return null;  
    } 
  }, 
  
  //获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null 
  this.element = function(_index) { 
    if (_index < 0 || _index >= this.elements.length){ 
      return null; 
    } 
    return this.elements[_index]; 
  }, 
  
  //判断Map中是否含有指定key的元素 
  this.containsKey = function(_key) { 
    var bln = false; 
    try { 
      for (i = 0; i < this.elements.length; i++) {  
        if (this.elements[i].key == _key){ 
          bln = true; 
        } 
      } 
    }catch(e) { 
      bln = false;  
    } 
    return bln; 
  }, 
   
  //判断Map中是否含有指定value的元素 
  this.containsValue = function(_value) { 
    var bln = false; 
    try { 
      for (i = 0; i < this.elements.length; i++) {  
        if (this.elements[i].value == _value){ 
          bln = true; 
        } 
      } 
    }catch(e) { 
      bln = false;  
    } 
    return bln; 
  }, 
  
  //获取Map中所有key的数组(array) 
  this.keys = function() { 
    var arr = new Array(); 
    for (i = 0; i < this.elements.length; i++) {  
      arr.push(this.elements[i].key); 
    } 
    return arr; 
  }, 
 
  //获取Map中所有value的数组(array) 
  this.values = function() { 
    var arr = new Array(); 
    for (i = 0; i < this.elements.length; i++) {  
      arr.push(this.elements[i].value); 
    } 
    return arr; 
  }; 
} 
//测试map 
alert('测试map'); 
var map=new Map(); 
map.put(0,0); 
map.put(1,1); 
map.put(2,2); 
alert('map的大小为:'+map.size()); 
for(var i=0;i<map.size();i++){ 
  alert('map的key'+i+'对应的value值为'+map.get(i)); 
} 
alert('获取map中不存在的键'+map.get('获取map中不存在的键')); 
alert('map中的所有键的长度'+map.keys().length); 
for(var i=0;i<map.keys().lenght;i++){ 
  alert('map中的键值'+map.keys()[i]); 
} 
alert('map中的所有的value值的长度'+map.values().length); 
for(var i=0;i<map.values().length;i++){ 
  alert('map中的value的值'+map.values()[i]); 
} 
alert('判断map中的值value是否存在3'+map.containsValue(3)); 
</script> 
<body> 
测试map 
</body> 
</html>

运行效果图:

js模仿java的Map集合详解

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
Jun 14 Javascript
js判断浏览器是否支持html5
Aug 17 Javascript
JavaScript实现twitter puddles算法实例
Dec 06 Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
Ionic3 UI组件之autocomplete详解
Jun 08 Javascript
微信小程序授权获取用户详细信息openid的实例详解
Sep 20 Javascript
Vue实现一个图片懒加载插件
Mar 11 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
浅析JavaScript 函数防抖和节流
Jul 13 Javascript
vue-openlayers实现地图坐标弹框效果
Sep 24 Javascript
吃通javascript正则表达式
Apr 21 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 #Javascript
JavaScript iframe数据共享接口实现方法
Jan 06 #Javascript
js实现仿qq消息的弹出窗效果
Jan 06 #Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 #Javascript
详解jQuery Mobile自定义标签
Jan 06 #Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 #Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 #Javascript
You might like
PHP缓存技术的使用说明
2011/08/06 PHP
PHP goto语句用法实例
2019/08/06 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
vue生命周期的探索
2019/04/03 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
Python中集合类型(set)学习小结
2015/01/28 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python自动化报告的输出用例详解
2018/05/30 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
信息部岗位职责
2013/11/12 职场文书
如何掌握自荐信格式呢
2013/11/19 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
个人委托书范本
2014/04/02 职场文书
销售顾问工作计划书
2014/08/15 职场文书
公务员政审材料范文
2014/12/23 职场文书
离婚代理词范文
2015/05/23 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS