跟小D每日学口语

利用JS特性实现的简单HashTable[转]

令人费解的是js提供了内置的Function、Date、Array等对象,却没有提供HashTable对象,但我们利用对象的特性是可以实现的。
   js的对象可以看成为一个的hashtable。在对象生命周期内,开发人员可以动态的为他们添加或删除属性、方法。由于对象自身就具有hashtable的特点,那么我只需要加上方便操作的hash接口实现,就是个简单的hash实现了。代码如下:

 1 var Hash=null;
2 (function()
3 {
4 //static private member
5 var _h = {};
6 var _l = 0;
7 //static private method
8 //if hash contain key, return true
9 //else return false
10 var _contain = function(key)
11 {
12 return _h.hasOwnProperty(key);
13 }
14 //constructor
15 Hash = function(){};
16 //public method on prototype
17 Hash.prototype = {
18 //hash is or no contain key
19 contain : function(key)
20 {
21 return _contain(key);
22 },
23 // add an pair of key and value
24 // if hash has contain key, then update value
25 add : function(key, obj)
26 {
27 var flag = _contain(key);
28 _h[key] = obj;
29 if(!flag)
30 _l++;
31 },
32 //remove an pair of key and value
33 remove : function(key)
34 {
35 if(_contain(key))
36 {
37 delete _h[key];
38 _l--;
39 }
40 },
41 //retrieve value of key from hash
42 get : function(key)
43 {
44 return _h[key];
45 },
46 // return hash contain amount of key&value'pair
47 length : function()
48 {
49 return _l;
50 }
51 }
52
53 })()
54 var MySpace = {hash:new Hash()};

这个代码简单的实现了hashtable的添加(或更改值)、移除、检索、是否包含key、及hashtable中键值数,代码极其简单,目的也很明确, 不多说。思想就是_h对象的属性名看作key,属性值看作值,进行动态的添加、更改、移除,并进行计数。将_h、_l设计成静态私有成员变 量,_contain方法设计成静态私有方法。通过原型将contain、add、remove、get、length方法公开。简单测试一下:

var h = MySpace.hash;
h.add(
"sds",{"name":"sds","age":30});
h.add(
"sds1",{"name":"sds1","age":31});
h.add(
"sds2",{"name":"sds2","age":32});
alert(h.contain(
"sds1"));//true
alert(h.length());//3
h.remove("sds1");
alert(h.contain(
"sds1"));//false
alert(h.length());//2
alert(h.get("sds").name);//sds;
alert(h.get("sds").age);//30;

随着ajax的火热及大量应用,将页面的请求分割成多个小的数据请求,提高了用户体验,但增加了服务器的请求次数。因此,页面数据缓存就显得很重要,对于 已请求过的数据,进行缓存,下次调用时就不用从服务器请求了,从而减轻了服务器负担。hashtable是作为缓存数据的最好容器,可以结合你的页面应用 的具体情况对hashtable进 行优化实现,以达到性能、体验最优。

转自:http://www.babyhey.com/forum.php?mod=viewthread&tid=1211&extra=page%3D1

posted @ 2011-09-05 17:19  腐乳  阅读(252)  评论(0编辑  收藏  举报