你的位置:首页 > Java教程

[Java教程]js实现hashtable的赋值、取值、遍历


  哈希表(Hashtable)这个概率应该是#c里面的概念,用来赋值、取值、遍历、排序操作提高效率。想起这个东西其实使我们以前经常遇到这样的面试题,一个很大的数组可能有100000个,如何快速知道它里面的出现最多的次数,那么这里我们可能就要用Hashtable的相关知识了。Javascript中,object的实现就是hash表,因此只要在object上封装点方法,再利用原生的hasOwnProperty方法就可以实现简单高效的hashtable。

一,什么是哈希表(Hashtable)

二,哈希表的简单操作

三,js模拟哈希表的简单操作

 

一,什么是哈希表(Hashtable)

   Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对。

二,哈希表的简单操作C#

  在哈希表中添加一个key/value键值对:

HashtableObject.Add(key,value);

  在哈希表中去除某个key/value键值对:

HashtableObject.Remove(key);

  从哈希表中移除所有元素:

HashtableObject.Clear();

  判断哈希表是否包含特定键key:

HashtableObject.Contains(key);

三,js模拟哈希表的简单操作

  HashTable.prototype = {        contructor:HashTable,        //初始化        initialize:function(){          this.obj = {};        },        //获取hashTable中对象唯一出现的次数        count:function(){          var count = 0;          for(var i in this.content) count++;          return count;        },        //返回hashTable中的值        items:function(key){          if(this.contains(key)){            return this.obj[key];          }        },        //增加值到hashtable        add:function(key,value){          if(this.obj.hasOwnProperty(key)){            return false;          }else{            this.obj[key] = value;            return true;          }        },        //清空hashtable中的值        clear:function(){          this.obj = {};        },        //检测hashTable对象中是否含有此属性        contains:function(key){          return this.obj.hasOwnProperty(key);        },        //移除hashTable中对象的值        remove:function(key){          delete this.obj[key];        }      } 

  这样我们就能像c#语言里面的那样进行操作了。

  还一个简单的变体版:

    // js哈希表     function HashTable() {       this.ObjArr = {};       this.Count = 0;       //添加       this.Add = function(key, value) {         if (this.ObjArr.hasOwnProperty(key)) {           return false; //如果键已经存在,不添加         }else {           this.ObjArr[key] = value;           this.Count++;           return true;         }       }       //是否包含某项       this.Contains = function(key) {         return this.ObjArr.hasOwnProperty(key);       }       //取某一项 其实等价于this.ObjArr[key]       this.GetValue = function(key){         if (this.Contains(key)) {           return this.ObjArr[key];         }else {           throw Error("Hashtable not cotains the key: " + String(key)); //脚本错误           //return;         }       }       //移除       this.Remove = function(key) {         if (this.Contains(key)) {           delete this.ObjArr[key];           this.Count--;         }       }       //清空       this.Clear = function(){         this.ObjArr = {}; this.Count = 0;       }     }                 //员工     function employee(id, userName) {       this.id = id;       this.userName = userName;     }     function test() {       var ht = new HashTable();       var tmpEmployee = null;       for (var i = 1; i < 6; i++) {         tmpEmployee = new employee(i, "Employee_" + i);         ht.Add(i, tmpEmployee);       }       for (var i = 1; i <= ht.Count; i++) {         alert(ht.GetValue(i).userName); //其实等价于ht.ObjArr[i].userName         //alert(ht.ObjArr[i].userName);       }       ht.Remove(1);       alert(ht.Contains(1)); //false       alert(ht.Contains(2)); //true       //alert(ht.GetValue(1)); //异常       var result = ht.GetValue(2);       if (result != null) {         alert("Employee Id:" + result.id + ";UserName:" + result.userName);       }       ht.Add(2, "这一个key已经存在!"); //Add无效       //ht.Clear(); //清空       alert(ht.Count);     }   

 

  最后解决一下,开头说的那个问题

    Array.prototype.maxNum = function(){      var arr = this,obj={};      for(var i =0, len=arr.length;i<len;i++){        var key = arr[i];        if( ! obj[key]){          obj[key] = 1;        }else{          obj[key]++;        }      }      var max = -1,maxStr;      for( key in obj){        if(obj[key]>max){          max = obj[key];          maxStr = key;        }      }      //alert(maxStr);      return [maxStr,max];    }

 

资料来源:C#中hashtable的赋值、取值、遍历、排序操作

     利用hasOwnProperty实现的高效的javascript hashtable