<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA & XML & JAVASCRIPT & AJAX & CSS

    Web 2.0 技術儲備............

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      77 隨筆 :: 17 文章 :: 116 評論 :: 0 Trackbacks

     

      1 <script language="javascript">
      2 /**
      3 *作者 :Fantasy
      4 *Email: fantasycs@163.com
      5 *QQ   : 8635335
      6 *Blog : http://www.tkk7.com/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         ifthis.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>
    posted on 2006-05-06 14:52 Web 2.0 技術資源 閱讀(6680) 評論(22)  編輯  收藏 所屬分類: Javascript

    評論

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性] 2006-05-06 16:39 123
    up!  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性] 2006-05-08 15:01 dennis
    很棒!  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性] 2006-05-08 23:53 Web 2.0 技術資源
    @dennis

    謝謝支持!

    這個是在我上次寫的HashMap上完全改進的~~~

    謝謝 bbs.51js.com 上的朋友提出寶貴的意見。
      回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2006-05-27 09:16
    頂個
    寫的不錯  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2006-08-02 17:22 java player
    謝謝主人。加油。  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2006-08-14 13:43 譚立平
    樓主的實現思路挺不錯,我在blog中把它改成了prototype版本的hashtable,其中修正了一個小bug ,就是刪除集合中對象的時候,如果對象不存在,那么size仍然會減1 ,整體說還是一個不錯的實現思路,呵呵,值得參考  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2006-08-15 10:48 Web 2.0 技術資源
    @譚立平

    謝謝 樓上的兄弟提出的BUG ~ 不過我自己測還沒測出這個問題......

    再次去參考了文檔 :
    /***********************************************/
    delete 運算符
    從對象中刪除一個屬性,或從數組中刪除一個元素。
    delete expression
    expression 參數是一個有效的 JScript 表達式,通常是一個屬性名或數組元素。
    說明
    如果 expression 的結果是一個對象,且在 expression 中指定的屬性存在,而該對象又不允許它被刪除,則返回 false。
    在所有其他情況下,返回 true。
    /***********************************************/
    在刪除元素的時候增加了~ this.containsKey(key) 的條件限制。
    增加了 clear 方法。
      回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2006-10-15 12:03 悠揚---靖寶華
    郁悶,對類和對象,昨天我理解錯了,今天好像是理解對了  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2006-10-22 12:08 Web 2.0 技術資源
    修正了一個嚴重的BUG .

    情況1
    var array = new Array();
    array.push("A"); array.length = 1

    情況2 (想當然的為初始化長度,以為那樣效率可以高那么一點點........)
    var array = new Array( 3 );
    array.push("A"); array.length = 4

    區別大呢............. 不像JAVA里面....

    他爺爺的~~!


      回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-01-09 12:55 js
    做個東西先要有實用的地方, Array自己可以帶名稱索引,可變長度,JS變量也是可變的.

    var hashTable = [];
    添加元數
    hashTable["A"] = "a";
    hashTable["B"] = object;
    得到元數
    var value = haseTable["A"];
    var value = haseTable["B"];

    所以說包含你的所有功能``沒有一點意義
    splice()就是你的remove()只是功能比你強點
    lenght就是你的size
    put(),get()直接通過索引隱式調用[""]
    另外比你多這些方法concat,join ,pop ,push,reverse,shift,slice,sort,toLocaleString  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-01-09 15:21 Web 2.0 技術資源
    @js

    設計這個Map 主要是為了填補 Javascript 中沒有Map工具的不足。

    你覺得你用Array 來代替 Map 那樣你寫的Javascript 會清晰明了嗎?

    那在Java里面何必需要HashSet, 直接用HashMap也能實現~

    關鍵是讓自己編碼更清晰.... 數據類型更明了。  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-04-24 14:33 ...
    這個具有緩存功能嗎?  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-04-24 14:36 fantasy
    @...

    具有緩存能力啊!
    只是看你怎么去實現了....... 你自己把握緩存的生命周期。  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現][未登錄] 2008-05-22 13:29 bobo
    支持火狐嗎?  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-05-23 09:41 fantasy
    支持FireFox  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-07-02 11:40 traveller
    @js
    這位仁兄,說別人不對的時候請先肯定自己是對的,不然很丟人現眼耶
    hashTable["A"] = "a";
    hashTable["B"] = object;
    這是Object就能提供的使用方法,而不是Array。用這種方式不會改變Array的長度,就是說你的length始終是0,"a"和object根本沒有放進Array內部的集合中,因此也是無法遍歷的。
    splice()和remove()在這沒有任何意義
    那么,你搞清楚了樓主到底要解決什么問題了嗎?  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-11-04 09:38 liz
    頂,寫的不錯  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2008-12-04 17:25 clue
    不小心路過...

    最近正好也自己寫了一個,你的實現還是會有些問題
    如果有框架自定義了
    Object.prototype
    當你for(var p in entry)時,會把自定義的prototype里的內容也取出來
    所以,最好定義一個PERFIX前綴來判斷是否是自己存的值
    -----------------------------
    function MyMap(){}
    MyMap.prototype = {
    _length : 0,
    _DEF_PERFIX : 'MY_MAP_KEY_',
    size : function(){return this._length},
    get : function(key){
    return this[this._DEF_PERFIX+key];
    },
    put : function(key,value){
    if(!this[this._DEF_PERFIX+key]){
    this._length++;
    }
    this[this._DEF_PERFIX+key] = value;
    return value;
    },
    remove : function(key){
    if(this._length>0 && this[this._DEF_PERFIX+key]){
    delete this[this._DEF_PERFIX+key];
    this._length--;
    return true;
    }
    return false;
    },
    getKeySet : function(){
    var retArr = [];
    for(var key in this){
    if(key.length>this._DEF_PERFIX.length && key.indexOf(this._DEF_PERFIX)==0){
    retArr.push(key.substr(this._DEF_PERFIX.length));
    }
    }
    return retArr;
    }
    }
      回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2009-01-06 17:42 Web 2.0 技術資源
    謝謝樓上的兄弟! 對頭................. 的確存在那樣的問題。
    沒考慮周全。  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2009-12-16 10:52 shouldbai
    這個在IE6里面測試過嗎?每次調用put方法都會報錯,entry is undefined  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2010-03-23 11:41 多福多壽
    好像都沒有一點哈希算法在里面 怎么算得上hashmap呢  回復  更多評論
      

    # re: [原創] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實現] 2010-05-05 11:25 tmp
    這不是 HashMap 鑒定完畢。只是對 Object 封裝一下,用處不大。  回復  更多評論
      

    主站蜘蛛池模板: 中文字幕免费视频精品一| 亚洲欧洲精品久久| 亚洲精品老司机在线观看| 国产一级特黄高清免费大片| 好大好深好猛好爽视频免费| 成人a视频片在线观看免费| 久久这里只有精品国产免费10| 国产h视频在线观看免费| 24小时日本电影免费看| 5g影院5g天天爽永久免费影院 | 亚洲电影免费在线观看| 亚洲av综合avav中文| 亚洲第一精品福利| 亚洲人成伊人成综合网久久| 亚洲人成小说网站色| 鲁死你资源站亚洲av| fc2成年免费共享视频网站| 中文字幕版免费电影网站| 一区二区三区无码视频免费福利| 一级毛片在线免费观看| 午夜免费1000部| 免费看的一级毛片| 亚洲高清免费视频| 亚洲成av人片在线观看无码不卡| 亚洲国产精品不卡在线电影| 亚洲免费一级视频| 国产亚洲精品第一综合| 久久久精品视频免费观看 | 看亚洲a级一级毛片| 9i9精品国产免费久久| 99热在线观看免费| 毛片免费观看网址| 亚洲 无码 在线 专区| 亚洲va久久久噜噜噜久久狠狠| 亚洲自偷精品视频自拍| 亚洲精品无码高潮喷水A片软| 国产无限免费观看黄网站| 最近免费字幕中文大全视频| 精品国产精品久久一区免费式| 亚洲一区二区三区国产精品| 亚洲精品综合一二三区在线|