<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 技術(shù)儲(chǔ)備............

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      77 隨筆 :: 17 文章 :: 116 評(píng)論 :: 0 Trackbacks

     

      1 <script language="javascript">
      2 /**
      3 *作者 :Fantasy
      4 *Email: fantasycs@163.com
      5 *QQ   : 8635335
      6 *Blog : http://m.tkk7.com/fantasy
      7 *版本 :V1.1 
      8 */
      9 function HashMap()
     10 {
     11     /** Map 大小 **/
     12     var size = 0;
     13     /** 對(duì)象 **/
     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 /** 同時(shí)也可以把對(duì)象作為 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 /** 把對(duì)象做為Key時(shí) ,自動(dòng)調(diào)用了該對(duì)象的 toString() 方法 其實(shí)最終還是以String對(duì)象為Key**/
    128 
    129 /** 如果是自定義對(duì)象 那自己得重寫 toString() 方法 否則 . 就是下面的結(jié)果 **/
    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 /** 運(yùn)行結(jié)果 小名 小名 size = 1 **/
    158 
    159 /** 如果改成復(fù)寫toString()方法的對(duì)象 , 效果就完全不一樣了 **/
    160 
    161 </script>
    posted on 2006-05-06 14:52 Web 2.0 技術(shù)資源 閱讀(6682) 評(píng)論(22)  編輯  收藏 所屬分類: Javascript

    評(píng)論

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

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

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

    謝謝支持!

    這個(gè)是在我上次寫的HashMap上完全改進(jìn)的~~~

    謝謝 bbs.51js.com 上的朋友提出寶貴的意見。
      回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2006-05-27 09:16
    頂個(gè)
    寫的不錯(cuò)  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2006-08-02 17:22 java player
    謝謝主人。加油。  回復(fù)  更多評(píng)論
      

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

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

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

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

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2006-10-15 12:03 悠揚(yáng)---靖寶華
    郁悶,對(duì)類和對(duì)象,昨天我理解錯(cuò)了,今天好像是理解對(duì)了  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2006-10-22 12:08 Web 2.0 技術(shù)資源
    修正了一個(gè)嚴(yán)重的BUG .

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

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

    區(qū)別大呢............. 不像JAVA里面....

    他爺爺?shù)膥~!


      回復(fù)  更多評(píng)論
      

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

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

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

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

    設(shè)計(jì)這個(gè)Map 主要是為了填補(bǔ) Javascript 中沒有Map工具的不足。

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

    那在Java里面何必需要HashSet, 直接用HashMap也能實(shí)現(xiàn)~

    關(guān)鍵是讓自己編碼更清晰.... 數(shù)據(jù)類型更明了。  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2008-04-24 14:33 ...
    這個(gè)具有緩存功能嗎?  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2008-04-24 14:36 fantasy
    @...

    具有緩存能力??!
    只是看你怎么去實(shí)現(xiàn)了....... 你自己把握緩存的生命周期。  回復(fù)  更多評(píng)論
      

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

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2008-05-23 09:41 fantasy
    支持FireFox  回復(fù)  更多評(píng)論
      

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

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2008-11-04 09:38 liz
    頂,寫的不錯(cuò)  回復(fù)  更多評(píng)論
      

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

    最近正好也自己寫了一個(gè),你的實(shí)現(xiàn)還是會(huì)有些問題
    如果有框架自定義了
    Object.prototype
    當(dāng)你for(var p in entry)時(shí),會(huì)把自定義的prototype里的內(nèi)容也取出來
    所以,最好定義一個(gè)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;
    }
    }
      回復(fù)  更多評(píng)論
      

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

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2009-12-16 10:52 shouldbai
    這個(gè)在IE6里面測試過嗎?每次調(diào)用put方法都會(huì)報(bào)錯(cuò),entry is undefined  回復(fù)  更多評(píng)論
      

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

    # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2010-05-05 11:25 tmp
    這不是 HashMap 鑒定完畢。只是對(duì) Object 封裝一下,用處不大。  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲乱码日产精品BD在线观看| 亚洲AV无码国产精品色午友在线| 亚洲AV无码精品国产成人| 日本高清免费网站| 有色视频在线观看免费高清在线直播 | 亚洲人成在线电影| 永久免费AV无码网站在线观看| 亚洲精品黄色视频在线观看免费资源 | a毛片在线还看免费网站| 亚洲狠狠综合久久| 香蕉视频在线观看亚洲| 四虎影视永久免费观看地址| 暖暖免费在线中文日本| 色综合久久精品亚洲国产| 午夜亚洲WWW湿好爽 | 亚洲精品夜夜夜妓女网| 99久久亚洲精品无码毛片| 黄色片在线免费观看| 亚洲男人天堂2017| 国产亚洲成AV人片在线观黄桃| 亚洲线精品一区二区三区| 真人做人试看60分钟免费视频 | 狠狠色婷婷狠狠狠亚洲综合| 国产大片线上免费观看| 中文字幕乱理片免费完整的| 亚洲乱理伦片在线观看中字| 亚洲人成人无码网www电影首页| 久久精品国产亚洲一区二区| 四虎影库久免费视频| 四虎永久免费影院在线| 亚洲中久无码不卡永久在线观看| 毛片免费全部播放一级| a拍拍男女免费看全片| 中文字幕免费不卡二区| 人与动性xxxxx免费| 在线成人精品国产区免费| 日本h在线精品免费观看| 免费无码又爽又刺激高潮| 亚洲五月午夜免费在线视频| 亚洲va在线va天堂va888www| 亚洲一区二区三区高清在线观看 |