[原创] Javascript 封装 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代码实现]
1
<
script language
=
"
javascript
"
>
2 /* *
3 *作者 :Fantasy
4 *Email: [email protected]
5 *QQ : 8635335
6 *Blog : http://www.blogjava.net/fantasy
7 *版本 :V1.1
8 */
9 function HashMap()
10 {
11 /* * Map 大小 * */
12 var size = 0 ;
13 /* * 对象 * */
14 var entry = new Object();
15
16 /* * 存 * */
17 this .put = function (key , value)
18 {
19 if ( ! this .containsKey(key))
20 {
21 size ++ ;
22 }
23 entry[key] = value;
24 }
25
26 /* * 取 * */
27 this .get = function (key)
28 {
29 return this .containsKey(key) ? entry[key] : null ;
30 }
31
32 /* * 删除 * */
33 this .remove = function ( key )
34 {
35 if ( this .containsKey(key) && ( delete entry[key] ) )
36 {
37 size -- ;
38 }
39 }
40
41 /* * 是否包含 Key * */
42 this .containsKey = function ( key )
43 {
44 return (key in entry);
45 }
46
47 /* * 是否包含 Value * */
48 this .containsValue = function ( value )
49 {
50 for ( var prop in entry)
51 {
52 if (entry[prop] == value)
53 {
54 return true ;
55 }
56 }
57 return false ;
58 }
59
60 /* * 所有 Value * */
61 this .values = function ()
62 {
63 var values = new Array();
64 for ( var prop in entry)
65 {
66 values.push(entry[prop]);
67 }
68 return values;
69 }
70
71 /* * 所有 Key * */
72 this .keys = function ()
73 {
74 var keys = new Array();
75 for ( var prop in entry)
76 {
77 keys.push(prop);
78 }
79 return keys;
80 }
81
82 /* * Map Size * */
83 this .size = function ()
84 {
85 return size;
86 }
87
88 /* 清空 */
89 this .clear = function ()
90 {
91 size = 0 ;
92 entry = new Object();
93 }
94 }
95
96 var map = new HashMap();
97
98 /*
99 map.put("A","1");
100 map.put("B","2");
101 map.put("A","5");
102 map.put("C","3");
103 map.put("A","4");
104 */
105
106 /*
107 alert(map.containsKey("XX"));
108 alert(map.size());
109 alert(map.get("A"));
110 alert(map.get("XX"));
111 map.remove("A");
112 alert(map.size());
113 alert(map.get("A"));
114 */
115
116 /* * 同时也可以把对象作为 Key * */
117 /*
118 var arrayKey = new Array("1","2","3","4");
119 var arrayValue = new Array("A","B","C","D");
120 map.put(arrayKey,arrayValue);
121 var value = map.get(arrayKey);
122 for(var i = 0 ; i < value.length ; i++)
123 {
124 //alert(value[i]);
125 }
126 */
127 /* * 把对象做为Key时 ,自动调用了该对象的 toString() 方法 其实最终还是以String对象为Key* */
128
129 /* * 如果是自定义对象 那自己得重写 toString() 方法 否则 . 就是下面的结果 * */
130
131 function MyObject(name)
132 {
133 this .name = name;
134 }
135
136 /* *
137 function MyObject(name)
138 {
139 this.name = name;
140
141 this.toString = function ()
142 {
143 return this.name;
144 }
145 }
146 * */
147 var object1 = new MyObject( " 小张 " );
148 var object2 = new MyObject( " 小名 " );
149
150 map.put(object1, " 小张 " );
151 map.put(object2, " 小名 " );
152 alert(map.get(object1));
153 alert(map.get(object2));
154 map.remove( " xxxxx " );
155 alert(map.size());
156
157 /* * 运行结果 小名 小名 size = 1 * */
158
159 /* * 如果改成复写toString()方法的对象 , 效果就完全不一样了 * */
160
161 </ script >
2 /* *
3 *作者 :Fantasy
4 *Email: [email protected]
5 *QQ : 8635335
6 *Blog : http://www.blogjava.net/fantasy
7 *版本 :V1.1
8 */
9 function HashMap()
10 {
11 /* * Map 大小 * */
12 var size = 0 ;
13 /* * 对象 * */
14 var entry = new Object();
15
16 /* * 存 * */
17 this .put = function (key , value)
18 {
19 if ( ! this .containsKey(key))
20 {
21 size ++ ;
22 }
23 entry[key] = value;
24 }
25
26 /* * 取 * */
27 this .get = function (key)
28 {
29 return this .containsKey(key) ? entry[key] : null ;
30 }
31
32 /* * 删除 * */
33 this .remove = function ( key )
34 {
35 if ( this .containsKey(key) && ( delete entry[key] ) )
36 {
37 size -- ;
38 }
39 }
40
41 /* * 是否包含 Key * */
42 this .containsKey = function ( key )
43 {
44 return (key in entry);
45 }
46
47 /* * 是否包含 Value * */
48 this .containsValue = function ( value )
49 {
50 for ( var prop in entry)
51 {
52 if (entry[prop] == value)
53 {
54 return true ;
55 }
56 }
57 return false ;
58 }
59
60 /* * 所有 Value * */
61 this .values = function ()
62 {
63 var values = new Array();
64 for ( var prop in entry)
65 {
66 values.push(entry[prop]);
67 }
68 return values;
69 }
70
71 /* * 所有 Key * */
72 this .keys = function ()
73 {
74 var keys = new Array();
75 for ( var prop in entry)
76 {
77 keys.push(prop);
78 }
79 return keys;
80 }
81
82 /* * Map Size * */
83 this .size = function ()
84 {
85 return size;
86 }
87
88 /* 清空 */
89 this .clear = function ()
90 {
91 size = 0 ;
92 entry = new Object();
93 }
94 }
95
96 var map = new HashMap();
97
98 /*
99 map.put("A","1");
100 map.put("B","2");
101 map.put("A","5");
102 map.put("C","3");
103 map.put("A","4");
104 */
105
106 /*
107 alert(map.containsKey("XX"));
108 alert(map.size());
109 alert(map.get("A"));
110 alert(map.get("XX"));
111 map.remove("A");
112 alert(map.size());
113 alert(map.get("A"));
114 */
115
116 /* * 同时也可以把对象作为 Key * */
117 /*
118 var arrayKey = new Array("1","2","3","4");
119 var arrayValue = new Array("A","B","C","D");
120 map.put(arrayKey,arrayValue);
121 var value = map.get(arrayKey);
122 for(var i = 0 ; i < value.length ; i++)
123 {
124 //alert(value[i]);
125 }
126 */
127 /* * 把对象做为Key时 ,自动调用了该对象的 toString() 方法 其实最终还是以String对象为Key* */
128
129 /* * 如果是自定义对象 那自己得重写 toString() 方法 否则 . 就是下面的结果 * */
130
131 function MyObject(name)
132 {
133 this .name = name;
134 }
135
136 /* *
137 function MyObject(name)
138 {
139 this.name = name;
140
141 this.toString = function ()
142 {
143 return this.name;
144 }
145 }
146 * */
147 var object1 = new MyObject( " 小张 " );
148 var object2 = new MyObject( " 小名 " );
149
150 map.put(object1, " 小张 " );
151 map.put(object2, " 小名 " );
152 alert(map.get(object1));
153 alert(map.get(object2));
154 map.remove( " xxxxx " );
155 alert(map.size());
156
157 /* * 运行结果 小名 小名 size = 1 * */
158
159 /* * 如果改成复写toString()方法的对象 , 效果就完全不一样了 * */
160
161 </ script >