利用javascript特性实现的简单HashTable

      令人费解的是js提供了内置的Function、Date、Array等对象,却没有提供HashTable对象,但我们利用对象的特性是可以实现的。
      js的对象可以看成为一个的hashtable。在对象生命周期内,开发人员可以动态的为他们添加或删除属性、方法。由于对象自身就具有hashtable的特点,那么我只需要加上方便操作的hashtable接口实现。代码如下:
var HashTable=null;
(function()
{
        //static private member
        var _h = {};
        var _l = 0;
        //static private method
        //if hash contain key, return true
        //else return false
        var _contain = function(key)
        {
                return _h.hasOwnProperty(key);
        }
        //constructor
        HashTable= function(){};
        //public method on prototype
        HashTable.prototype = {
                //hash is or no contain key
                contain : function(key)
                {
                        return _contain(key);
                },
                // add an pair of key and value
                // if hash has contain key, then update value
                add : function(key, obj)
                {
                        var flag = _contain(key);
                        _h[key] = obj;
                        if(!flag)
                                _l++;
                },
                //remove an pair of key and value
                remove : function(key)
                {
                        if(_contain(key))
                        {
                                delete _h[key];
                                _l--;
                        }
                },
                //retrieve value of key from hash
                get : function(key)
                {
                        return _h[key];
                },
                // return hash contain amount of key&value'pair
                length : function()
                {
                        return _l;
                }
        }       
})();
var MySpace = {hashTable:new HashTable()};

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

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

       随着ajax的火热及大量应用,将页面的请求分割成多个小的数据请求,提高了用户体验,但增加了服务器的请求次数。因此,页面数据缓存就显得很重要,对于 已请求过的数据,进行缓存,下次调用时就不用从服务器请求了,从而减轻了服务器负担。hashtable是作为缓存数据的最好容器,可以结合你的页面应用 的具体情况对hashtable进 行优化实现,以达到性能、体验最优。
posted @ 2011-07-06 13:28  沈沈  阅读(310)  评论(0编辑  收藏  举报