1 /**
2 * MAP对象,实现MAP功能
3 *
4 * 接口:
5 * size() 获取MAP元素个数
6 * isEmpty() 判断MAP是否为空
7 * clear() 删除MAP所有元素
8 * put(key, value) 向MAP中增加元素(key, value)
9 * remove(key) 删除指定KEY的元素,成功返回True,失败返回False
10 * get(key) 获取指定KEY的元素值VALUE,失败返回NULL
11 * element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
12 * containsKey(key) 判断MAP中是否含有指定KEY的元素
13 * containsValue(value) 判断MAP中是否含有指定VALUE的元素
14 * values() 获取MAP中所有VALUE的数组(ARRAY)
15 * keys() 获取MAP中所有KEY的数组(ARRAY)
16 *
17 * 例子:
18 * var map = new Map();
19 *
20 * map.put("key", "value");
21 * var val = map.get("key")
22 * ……
23 *
24 */
25 function hashmap() {
26 /**
27 * 存放数据
28 */
29 this.data = new Object();
30
31 /**
32 * 放入一个键值对
33 * @param {String} key
34 * @param {Object} value
35 */
36 this.put = function(key, value)
37 {
38 this.data[key] = value;
39 };
40
41 /**
42 * 获取某键对应的值
43 * @param {String} key
44 * @return {Object} value
45 */
46 this.get = function(key)
47 {
48 return this.containsKey(key)?this.data[key]:null;
49 };
50
51 /**
52 * 删除一个键值对
53 * @param {String} key
54 */
55 this.remove = function(key)
56 {
57 delete this.data[key];
58 };
59
60 /**
61 * 遍历Map,执行处理函数
62 *
63 * @param {Function} 回调函数 function(key,value,index){..}
64 */
65 this.each = function(fn){
66 if(typeof fn != 'function')
67 {
68 return;
69 }
70 var len = this.data.length;
71 for(var i=0;i<len;i++)
72 {
73 var k = this.data[i];
74 fn(k,this.data[k],i);
75 }
76 };
77
78 /**
79 * 获取键值数组(类似Java的entrySet())
80 * @return 键值对象{key,value}的数组
81 */
82 this.entrys = function()
83 {
84 var len = this.data.length;
85 var entrys = new Array(len);
86 for (var i = 0; i < len; i++) {
87 entrys[i] = {
88 key : i,
89 value : this.data[i]
90 };
91 }
92 return entrys;
93 };
94
95 /**
96 * 判断Map是否为空
97 */
98 this.isEmpty = function()
99 {
100 return this.data.length == 0;
101 };
102
103 /**
104 * 获取键值对数量
105 */
106 this.size = function()
107 {
108 return this.data.length;
109 };
110
111 /**
112 * 重写toString ,装成JSON格式
113 */
114 this.toString = function()
115 {
116 var s = "[";
117 for(var i=0;i<this.data.length;i++,s+=','){
118 var k = this.data[i];
119 s += "{'id':'" + k+"','value':'"+this.data[k]+"'}";
120 }
121 s=s.substring(0, s.length-1);
122 if(s!=""){
123 s+="]";
124 }
125 return s;
126 };
127
128 /**
129 * 输出Value的值
130 */
131 this.values = function (){
132 var _values= new Array();
133 for(var key in this.data)
134 {
135 _values.push(this.data[key]);
136 }
137 return _values;
138 };
139
140 /**
141 * 获取keys
142 */
143 this.keySet = function (){
144 var _keys = new Array();
145 for(var key in this.data)
146 {
147 _keys.push(key);
148 }
149 return _keys;
150 };
151
152 /**
153 * 判断MAP中是否含有指定KEY的元素
154 */
155 this.containsKey = function(_key)
156 {
157 return (_key in this.data);
158 };
159
160 /**
161 * 清空Map
162 */
163 this.clear = function(){
164 this.data.length = 0;
165 this.data = new Object();
166 };
167 }