`
vefan
  • 浏览: 84044 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript实现的Map

阅读更多

自己用Javascript写了一个Map,没有别人写的好,不过也要贴出来,作为学习参考!

			function Map()
			{
				this.Entry = function(key,value){
					this.key=key;
					this.value=value;
				};
				this.EntrySet = new Array();
				
				this.constraint = function(key){
					if(null==key || undefined==key ||"undefined"==typeof(key) || ""==key)
					{
						return false;
					}
					return true;
				};
				
				this.entry = function (key){
					if(!this.constraint(key))return;
					
					for(var i=0; i<this.EntrySet.length; i++)
					{
						var entry = this.EntrySet[i];
						if(entry.key==key) {
							return entry;
						};
					}
					return;
				};
				
				this.put=function(key,value){
					if(!this.constraint(key))return;
				    var entry = this.entry(key);
					if(entry)
					{
						entry.value = value;
					}else
					{
						this.EntrySet.push(new this.Entry(key,value));					
					}
				};
				
				this.get=function(key){
					var entry = this.entry(key);
					if(entry)
					{
						return entry.value;
					}
					return;
				};
				
			}//end of map define

    下面把人家写的HashMap也贴出来,供参考学习!

/**
* HashMap构造函数
*/
function HashMap()
{
   this.length = 0;
   this.prefix = "hashmap_prefix_20040716_";
}
/**
* 向HashMap中添加键值对
*/
HashMap.prototype.put = function (key, value)
{
 if(!this[this.prefix+key]){
    this[this.prefix + key] = value;
    this.length ++;
 }
}
/**
* 从HashMap中获取value值
*/
HashMap.prototype.get = function(key)
{
   return typeof this[this.prefix + key] == "undefined"
           ? null : this[this.prefix + key];
}
/**
* 从HashMap中获取所有key的集合,以数组形式返回
*/
HashMap.prototype.keySet = function()
{
   var arrKeySet = new Array();
   var index = 0;
   for(var strKey in this)
   {
       if(strKey.substring(0,this.prefix.length) == this.prefix)
           arrKeySet[index ++] = strKey.substring(this.prefix.length);
   }
   return arrKeySet.length == 0 ? null : arrKeySet;
}
/**
* 从HashMap中获取value的集合,以数组形式返回
*/
HashMap.prototype.values = function()
{
   var arrValues = new Array();
   var index = 0;
   for(var strKey in this)
   {	 
       if(strKey.substring(0,this.prefix.length) == this.prefix)
       {
    	
           arrValues[index ++] = this[strKey];
       }
   }
  
   return arrValues.length == 0 ? null : arrValues;
}
/**
* 获取HashMap的value值数量
*/
HashMap.prototype.size = function()
{	
   return this.length;
}
/**
* 删除指定的值
*/
HashMap.prototype.remove = function(key)
{
   delete this[this.prefix + key];
   this.length --;
}
/**
* 清空HashMap
*/
HashMap.prototype.clear = function()
{
   for(var strKey in this)
   {
       if(strKey.substring(0,this.prefix.length) == this.prefix)
           delete this[strKey];  
   }
   this.length = 0;
}
/**
* 判断HashMap是否为空
*/
HashMap.prototype.isEmpty = function()
{
   return this.length == 0;
}
/**
* 判断HashMap是否存在某个key
*/
HashMap.prototype.containsKey = function(key)
{
   for(var strKey in this)
   {
      if(strKey == this.prefix + key)
         return true; 
   }
   return false;
}
/**
* 判断HashMap是否存在某个value
*/
HashMap.prototype.containsValue = function(value)
{
   for(var strKey in this)
   {
      if(this[strKey] == value)
         return true; 
   }
   return false;
}
/**
* 把一个HashMap的值加入到另一个HashMap中,参数必须是HashMap
*/
HashMap.prototype.putAll = function(map)
{
   if(map == null)
       return;
   if(map.constructor != HashMap)
       return;
   var arrKey = map.keySet();
   var arrValue = map.values();
   for(var i in arrKey)
      this.put(arrKey[i],arrValue[i]);
}
//toString
HashMap.prototype.toString = function()
{
   var str = "";
   for(var strKey in this)
   {
       if(strKey.substring(0,this.prefix.length) == this.prefix)
             str += strKey.substring(this.prefix.length)
                 + " : " + this[strKey] + "\r\n";
   }
   return str;
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics