zoukankan      html  css  js  c++  java
  • 利用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

  • 相关阅读:
    2050大会,让世界离年青人更近,让年青人离世界更近
    2050大会,让世界离年青人更近,让年青人离世界更近
    Mybatis-Configuration-详解
    Mybatis-Configuration-详解
    .NET内置的Ajax工作原理
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/405464904/p/2167754.html
Copyright © 2011-2022 走看看