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 相关文章推荐
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
jquery foreach使用示例
Sep 12 Javascript
JS版的date函数(和PHP的date函数一样)
May 12 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
Aug 16 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
超简单的Vue.js环境搭建教程
Mar 17 Javascript
利用node.js如何创建子进程详解
Dec 09 Javascript
jQuery轮播图功能制作方法详解
Dec 03 jQuery
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 session应用实例 登录验证
2009/03/16 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
php生成微信红包数组的方法
2019/09/05 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
Python多线程正确用法实例解析
2020/05/30 Python
python中如何打包用户自定义模块
2020/09/23 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
大学生的网络创业计划书
2013/12/26 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
法人委托书范本
2014/04/04 职场文书
员工薪酬激励方案
2014/06/13 职场文书
出售房屋协议书范本
2014/10/06 职场文书