在js中实现java中的Map对象

  1 <html>
  2 <head>
  3 <title>Test Map</title>
  4 <script type="text/javascript">
  5 <!--
  6
  7 /**
  8  * Simple Map
  9  *
 10  *
 11  * var m = new Map();
 12  * m.put(‘key‘,‘value‘);
 13  * ...
 14  * var s = "";
 15  * m.each(function(key,value,index){
 16  *      s += index+":"+ key+"="+value+"/n";
 17  * });
 18  * alert(s);
 19  *
 20  */
 21 function Map() {
 22     /** 存放键的数组(遍历用到) */
 23     this.keys = new Array();
 24     /** 存放数据 */
 25     this.data = new Object();
 26
 27     /**
 28      * 放入一个键值对
 29      * @param {String} key
 30      * @param {Object} value
 31      */
 32     this.put = function(key, value) {
 33         if(this.data[key] == null){
 34             this.keys.push(key);
 35         }
 36         this.data[key] = value;
 37     };
 38
 39     /**
 40      * 获取某键对应的值
 41      * @param {String} key
 42      * @return {Object} value
 43      */
 44     this.get = function(key) {
 45         return this.data[key];
 46     };
 47
 48     /**
 49      * 删除一个键值对
 50      * @param {String} key
 51      */
 52     this.remove = function(key) {
 53         this.keys.remove(key);
 54         this.data[key] = null;
 55     };
 56
 57     /**
 58      * 遍历Map,执行处理函数
 59      *
 60      * @param {Function} 回调函数 function(key,value,index){..}
 61      */
 62     this.each = function(fn){
 63         if(typeof fn != ‘function‘){
 64             return;
 65         }
 66         var len = this.keys.length;
 67         for(var i=0;i<len;i++){
 68             var k = this.keys[i];
 69             fn(k,this.data[k],i);
 70         }
 71     };
 72
 73     /**
 74      * 获取键值数组(类似Java的entrySet())
 75      * @return 键值对象{key,value}的数组
 76      */
 77     this.entrys = function() {
 78         var len = this.keys.length;
 79         var entrys = new Array(len);
 80         for (var i = 0; i < len; i++) {
 81             entrys[i] = {
 82                 key : this.keys[i],
 83                 value : this.data[i]
 84             };
 85         }
 86         return entrys;
 87     };
 88
 89     /**
 90      * 判断Map是否为空
 91      */
 92     this.isEmpty = function() {
 93         return this.keys.length == 0;
 94     };
 95
 96     /**
 97      * 获取键值对数量
 98      */
 99     this.size = function(){
100         return this.keys.length;
101     };
102
103     /**
104      * 重写toString
105      */
106     this.toString = function(){
107         var s = "{";
108         for(var i=0;i<this.keys.length;i++,s+=‘,‘){
109             var k = this.keys[i];
110             s += k+"="+this.data[k];
111         }
112         s+="}";
113         return s;
114     };
115 }
116
117
118 function testMap(){
119     var m = new Map();
120     m.put(‘key1‘,‘aaa‘);
121     m.put(‘key2‘,‘bbb‘);
122     m.put(‘key3‘,‘ccc‘);
123     alert("init:"+m);
124
125     m.put(‘key1‘,‘aaaxg‘);
126     alert("set key1:"+m);
127
128     m.remove("key2");
129     alert("remove key2: "+m);
130
131     var s ="";
132     m.each(function(key,value,index){
133         s += index+":"+ key+"="+value+"\n";
134     });
135     alert(s);
136 }
137 //-->
138 </script>
139 </head>
140 <body>
141 <input type="button" value="test" onclick="testMap()">
142 </body>
143 </html>
时间: 2024-10-09 02:00:50

在js中实现java中的Map对象的相关文章

js 定义像java一样的map方便取值

js 定义像java一样的map方便取值. 百度有位大神说"js对象本身就是一种Map结构",这真是一段让人欢天喜地的代码. <script> //定义一个全局map var map = {}; var key0 = '0'; var key1 = '1'; map[key0] = '0-真实报文'; map[key1] = '1-虚拟报文'; //row 获取这行的值 ,index 获取索引值 function testJsMap(key){ //如果遍历map for(

面试中关于Java中涉及到知识点(转)

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? (1)boolean boolean数据类型非true即false.这个数据类型表示1 bit的信息,但是它的大小并没有精确定义. <Java虚拟机规范>中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持.在Java虚拟机中没有任何供

js如何实现java中list的那些功能

//添加一个值 add(object) { list[list.length] = object; } //删除下标为index的值 removeIndex(index) { var object = this.list[index]; this.list.splice(index, 1); return object; } //删除元素object remove(object) { var i = 0; for (; i < list.length; i++) { if (list[i] ==

Java中的软(弱)引用

一.Java中的强.软.弱.虚引用 在JDK中我们可以看到有一个java.lang.ref的包,这个包中就是Java中实现强.软.弱.虚引用的包,如下: PhantomReference 虚引用:如果一个对象持有虚引用,就和没有持有引用一样,在任何时候都可能被垃圾回收器回收.虚引用主要用来跟踪对象被垃圾回收的活动,虚引用还有一个和弱.软引用不同的地方是虚引用必须和引用队列联合使用.当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把这个虚引用加入到与之关联的引用队列中

【Java面试题】52 java中会存在内存泄漏吗,请简单描述。

所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中.Java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉.由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的. package com.huawei.interview; import java.io.IOException; public class Garbage

JAVA中会存在内存泄露吗

所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中.java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉.由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的,例如下面的代码可以看到这种情况的内存回收: package com.huawei.interview; import java.io.IOException;

Java中JIN机制及System.loadLibrary() 的执行过程

Android平台Native开发与JNI机制详解 http://mysuperbaby.iteye.com/blog/915425 个人认为下面这篇转载的文章写的很清晰很不错. 注意Android平台上的JNI机制使用包括Java代码中调用Native模块以及Native代码中调用Java模块. http://www.ophonesdn.com/article/show/263(misybing:很遗憾该站已经挂掉) 众所周知,OPhone平台上的应用开发主要基于Java语言,但平台完全支持且

Java中性能优化的45个细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源的使用,通过线程同步来控制资源的并发访问: 控制实例的产生,以达到节约资源的目的: 控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信. 2. 尽量避免随意使用静态变量 当某个

Java 中的 ==, equals 与 hashCode 的区别与联系

一.概述 1.概念 == : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系 equals : Object 的 实例方法,比较两个对象的content是否相同 hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数 二.关系操作符 == 1.操作数的值 基本数据类型变量 在Java中有八种基本数据类型: 浮点型:float(4 byte), double(8 byte) 整型:byt