javascript中的hashtable實現

來源:互聯網
上載者:User
javascript中沒有像c#,java那樣的雜湊表(hashtable),
然而,javascript中的Array也只有一些類似於'雜湊表'的非常簡易功能, 如下:

  1.  var arr = new Array();
  2.  arr['item1'] = 'the value of item 1 ';
  3.  arr['item2'] = 'the value of item 2 ';
  4.  alert(arr['item1']);
  5.  alert(arr['item2']);

但上述功能,不符我們的實際要求,另外查詢遍曆也不方便,我們需要在Array的基礎上進行擴充,
下面我們可以用js中的數組來實作類別似的hashtable的功能,

  1. function Hashtable(){
  2.     this.clear = hashtable_clear;
  3.     this.containsKey = hashtable_containsKey;
  4.     this.containsValue = hashtable_containsValue;
  5.     this.get = hashtable_get;
  6.     this.isEmpty = hashtable_isEmpty;
  7.     this.keys = hashtable_keys;
  8.     this.put = hashtable_put;
  9.     this.remove = hashtable_remove;
  10.     this.size = hashtable_size;
  11.     this.toString = hashtable_toString;
  12.     this.values = hashtable_values;
  13.     this.hashtable = new Array();
  14. }                
  15. function hashtable_clear(){
  16.     this.hashtable = new Array();
  17. }
  18. function hashtable_containsKey(key){
  19.     var exists = false;
  20.     for (var i in this.hashtable) {
  21.         if (i == key && this.hashtable[i] != null) {
  22.             exists = true;
  23.             break;
  24.         }
  25.     }
  26.     return exists;
  27. }
  28. function hashtable_containsValue(value){
  29.     var contains = false;
  30.     if (value != null) {
  31.         for (var i in this.hashtable) {
  32.             if (this.hashtable[i] == value) {
  33.                 contains = true;
  34.                 break;
  35.             }
  36.         }
  37.     }
  38.     return contains;
  39. }
  40. function hashtable_get(key){
  41.     return this.hashtable[key];
  42. }
  43. function hashtable_isEmpty(){
  44.     return (this.size == 0) ? true : false;
  45. }
  46. function hashtable_keys(){
  47.     var keys = new Array();
  48.     for (var i in this.hashtable) {
  49.         if (this.hashtable[i] != null) 
  50.             keys.push(i);
  51.     }
  52.     return keys;
  53. }
  54. function hashtable_put(key, value){
  55.     if (key == null || value == null) {
  56.         throw 'NullPointerException {' + key + '},{' + value + '}';
  57.     }else{
  58.         this.hashtable[key] = value;
  59.     }
  60. }
  61. function hashtable_remove(key){
  62.     var rtn = this.hashtable[key];
  63.     //this.hashtable[key] =null;
  64.     this.hashtable.splice(key,1);
  65.     return rtn;
  66. }
  67. function hashtable_size(){
  68.     var size = 0;
  69.     for (var i in this.hashtable) {
  70.         if (this.hashtable[i] != null) 
  71.             size ++;
  72.     }
  73.     return size;
  74. }
  75. function hashtable_toString(){
  76.     var result = '';
  77.     for (var i in this.hashtable)
  78.     {      
  79.         if (this.hashtable[i] != null) 
  80.             result += '{' + i + '},{' + this.hashtable[i] + '}\n';   
  81.     }
  82.     return result;
  83. }
  84. function hashtable_values(){
  85.     var values = new Array();
  86.     for (var i in this.hashtable) {
  87.         if (this.hashtable[i] != null) 
  88.             values.push(this.hashtable[i]);
  89.     }
  90.     return values;
  91. }

Hastable類使用方法:

  1. //執行個體化一個自訂的雜湊表類
  2. var hashTable = new Hashtable();

  3. hashTable.put(0,'abc');  //0為key, 'abc'為value
  4. hashTable.put(1,'123');
  5. hashTable.put(2,'88a');
  6. hashTable.put(3,'88a');

  7. //遍曆hashtable, 相當於c#和java中的foreach
  8. for (var key in hashTable.keys()){ /* 用keys方法 */
  9.     alert(hashTable.get(key)); //按key遍曆value
  10. }

  11. //遍曆hashtable, 相當於c#和java中的foreach
  12. for (var key in hashTable.hashtable)){ /* 用hashtable屬性 */
  13.     alert(hashTable.get(key)); //按key遍曆value
  14. }

  15. alert(hashTable.containsKey(1));        //返回true
  16. alert(hashTable.containsKey(4));      //因為不存在key為4的,返回false

  17. alert(hashTable.containsValue('888'));  //返回true
  18. alert(hashTable.containsValue('mobidogs')); //因為不存在value為'mobidogs'的,返回false

  19. hashTable.remove(1);  //移除key為1的元素
  20. alert(hashTable.containsKey(1));        //因為key為1的元素已被上行的reomve()方法移除,所以返回false

  1. //關於hastable的其它方法使用簡單,讀者可以自己測試 (此略)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.