JAVA & XML & JAVASCRIPT & AJAX & CSS

          Web 2.0 技術(shù)儲(chǔ)備............

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(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://www.aygfsteel.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ì)象 那自己得重寫(xiě) 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ù)寫(xiě)toString()方法的對(duì)象 , 效果就完全不一樣了 **/
          160 
          161 </script>
          posted on 2006-05-06 14:52 Web 2.0 技術(shù)資源 閱讀(6685) 評(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è)是在我上次寫(xiě)的HashMap上完全改進(jìn)的~~~

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

          # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2006-05-27 09:16
          頂個(gè)
          寫(xiě)的不錯(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 ,整體說(shuō)還是一個(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 ~ 不過(guò)我自己測(cè)還沒(méi)測(cè)出這個(gè)問(wèn)題......

          再次去參考了文檔 :
          /***********************************************/
          delete 運(yùn)算符
          從對(duì)象中刪除一個(gè)屬性,或從數(shù)組中刪除一個(gè)元素。
          delete expression
          expression 參數(shù)是一個(gè)有效的 JScript 表達(dá)式,通常是一個(gè)屬性名或數(shù)組元素。
          說(shuō)明
          如果 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)然的為初始化長(zhǎ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自己可以帶名稱索引,可變長(zhǎng)度,JS變量也是可變的.

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

          所以說(shuō)包含你的所有功能``沒(méi)有一點(diǎn)意義
          splice()就是你的remove()只是功能比你強(qiáng)點(diǎn)
          lenght就是你的size
          put(),get()直接通過(guò)索引隱式調(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 中沒(méi)有Map工具的不足。

          你覺(jué)得你用Array 來(lái)代替 Map 那樣你寫(xiě)的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)][未登錄](méi) 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
          這位仁兄,說(shuō)別人不對(duì)的時(shí)候請(qǐng)先肯定自己是對(duì)的,不然很丟人現(xiàn)眼耶
          hashTable["A"] = "a";
          hashTable["B"] = object;
          這是Object就能提供的使用方法,而不是Array。用這種方式不會(huì)改變Array的長(zhǎng)度,就是說(shuō)你的length始終是0,"a"和object根本沒(méi)有放進(jìn)Array內(nèi)部的集合中,因此也是無(wú)法遍歷的。
          splice()和remove()在這沒(méi)有任何意義
          那么,你搞清楚了樓主到底要解決什么問(wèn)題了嗎?  回復(fù)  更多評(píng)論
            

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

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

          最近正好也自己寫(xiě)了一個(gè),你的實(shí)現(xiàn)還是會(huì)有些問(wèn)題
          如果有框架自定義了
          Object.prototype
          當(dāng)你for(var p in entry)時(shí),會(huì)把自定義的prototype里的內(nèi)容也取出來(lái)
          所以,最好定義一個(gè)PERFIX前綴來(lái)判斷是否是自己存的值
          -----------------------------
          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ì)頭................. 的確存在那樣的問(wèn)題。
          沒(méi)考慮周全。  回復(fù)  更多評(píng)論
            

          # re: [原創(chuàng)] Javascript 封裝 HashMap v1.1 ...... [充分利用Javascript 的特性 80 行代碼實(shí)現(xiàn)] 2009-12-16 10:52 shouldbai
          這個(gè)在IE6里面測(cè)試過(guò)嗎?每次調(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 多福多壽
          好像都沒(méi)有一點(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)論
            

          主站蜘蛛池模板: 塔城市| 桂平市| 伊宁市| 双辽市| 旬阳县| 盐城市| 栖霞市| 台前县| 荔浦县| 府谷县| 青神县| 郸城县| 肥西县| 浑源县| 娄底市| 淅川县| 大同县| 平塘县| 睢宁县| 文山县| 奉化市| 若尔盖县| 左权县| 阳江市| 晋中市| 聊城市| 银川市| 卢湾区| 兖州市| 循化| 包头市| 宾阳县| 子洲县| 山丹县| 宽城| 元阳县| 竹山县| 平和县| 句容市| 太谷县| 武功县|