`
your233
  • 浏览: 276640 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

hashmap.js

阅读更多
/**
* 哈希表。其中键必须为非空字符串对象。
* @version 2012/2/1
* modify by fanggt
*/
var HashMap = function(){
this._table = {};
};

/**
* 按照指定键获取哈希表中对应值,未定义指定键时返回默认值。
* @param {String} key 指定键。
* @param {Object} defaultValue 默认返回值。
* @return {Object} 如果找到指定键,返回键所对应的值;否则,返回默认值;
* 如果未给定默认值,返回undefined。
*/
HashMap.prototype.get = function(key, defaultValue){
if (!(key instanceof String||typeof key==="string") || key==="")
{
alert("HashMap.prototype.get(key,defaultValue),"+ "其中key必须是不为空的字符串。");
return;
}
var k = HashMap._hash(key);
return typeof this._table[k]==="undefined"?defaultValue:this._table[k];
};

/**
* 设置指定键所对应的值。如果已存在指定键,修改对应值;如果不存在指定键,则创建之,并设置对应值。
* @param {String} key 指定键。
* @param {Object} value 指定对应的值。
* @exception {ArgumentException}
*/
HashMap.prototype.put = function(key, value){
if (!(key instanceof String||typeof key==="string") || key===""){
alert("HashMap.prototype.set(key,value),"+"其中key必须是不为空的字符串。");
return;
}
var k = HashMap._hash(key);
this._table[k] = value;
};

/**
* 以迭代器形式返回哈希表中所有的键。
* @return {Iterator} 哈希表中所有项的键组成的迭代器。
*/
HashMap.prototype.keys = function(){
var keyArray = new Array();
for (var k in this._table)
{
if (HashMap._PREFIX_REG.test(k))
{
keyArray.push(k.replace(HashMap._PREFIX_REG, ""));
}
}
return keyArray;
};

/**
* 以迭代器形式返回哈希表中所有的值。
* @return {Iterator} 哈希表中所有项的值组成的迭代器。
*/
HashMap.prototype.values = function(){
var valueArray = new Array();
for (var k in this._table)
{
if (HashMap._PREFIX_REG.test(k))
{
valueArray.push(this._table[k]);
}
}
return valueArray;
};

/**
* 判断哈希表是否包含指定键。
* @param {String} key 指定键。
* @return {Boolean} true,如果包含指定键,否则返回false。
*/
HashMap.prototype.containsKey = function(key){
var k = HashMap._hash(key);
return typeof this._table[k]!=="undefined";
};

/**
* 判断哈希表是否包含指定值。
* @param {Object} value 指定值。
* @return {Boolean} true,如果包含指定值,否则返回false。
*/
HashMap.prototype.containsValue = function(value){
for (var k in this._table){
if (value === this._table[k]){
return true;
}
}
return false;
};

/**
* 返回哈希表的大小,即哈希表中键值映射对象的个数。
* @return {Number}
*/
HashMap.prototype.size = function(){
var sz = 0;
for (var k in this._table)
if (HashMap._PREFIX_REG.test(k))
sz++;
return sz;
};

/**
* 判断哈希表是否为空,即哈希表中不存在键值映射对。
* @return {Boolean} true,如果不存在键值映射,否则返回false。
*/
HashMap.prototype.isEmpty = function(){
return this.size()===0;
};

/**
* 从此映射中移除所有映射关系。
*/
HashMap.prototype.clear = function(){
this._table = {};
/*
for (var k in this._table)
if (HashMap._PREFIX_REG.test(k)) {
this._table[k] = null;
delete this._table[k];
*/
};

HashMap.prototype.remove = function(key){
var k = HashMap._hash(key);
if (this.containsKey(key)){
this._table[k] = null;
delete this._table[k];
}
};

/**
* 将hashmap转化为JSON
* @version 2012-2-1
*/
HashMap.prototype.toJSONString = function(){
var myJSONBuffer = new StringBuffer();
myJSONBuffer.append("{");

var lon = 0;
var maxLength = this.size();
for (var k in this._table){
if (HashMap._PREFIX_REG.test(k)){
var key = k.replace(HashMap._PREFIX_REG,"");
var val = this._table[k];
myJSONBuffer.append("\"");
myJSONBuffer.append(key);
myJSONBuffer.append("\"");
myJSONBuffer.append(":");
myJSONBuffer.append("\"");
myJSONBuffer.append(val);
myJSONBuffer.append("\"");
if(lon!=maxLength-1){
myJSONBuffer.append(",");
}
lon ++;
}
}
myJSONBuffer.append("}");
return myJSONBuffer.toString();
}

HashMap.prototype.toString = function(){
var sb = new StringBuffer();
for (var k in this._table)
if (HashMap._PREFIX_REG.test(k))
sb.appendLine(k.replace(HashMap._PREFIX_REG,"")+"="+this._table[k]);
return sb.toString();
};

/**
* @type {RegExp} 匹配哈希表各项的前缀,用于判断当前键是否是哈希表的键,
* (防止Object扩展成员/方法的干扰)。如果修改此处,必同步修改HashMap._PREFIX。
*/
HashMap._PREFIX_REG = /^\$hc_/;
/**
* @type {RegExp} 拥有将哈希表转为JSON字符串时,将键中的前缀剔除。
*/
HashMap._PREFIX_JSON_REG = /\$hc_/g;
/**
* @type {String} 同HashMap.PREFIX_REG之理。
*/
HashMap._PREFIX = "$hc_";

/**
* 对指定字符串进行“哈希化”。
* 为防止Object类型的扩展对this._table的成员/方法,为每个键前加上指定的前缀,如果改变此前缀,
* 请同步修改HashMap._PREFIX的表达式。
* @param {String} s 指定字符串。
* @ignore
*/
HashMap._hash = function(s){
if (!(s instanceof String||typeof s==="string") || s===""){
alert("HashMap._hash(s) 中的参数s必须是非空字符串。");
return;
}
return HashMap._PREFIX + s;
};


/**
* StringBuffer定义
*/
function StringBuffer(){
this.content = new Array;
}

StringBuffer.prototype.append = function( str ){
this.content.push( str );
}
StringBuffer.prototype.appendLine = function( str ){
this.content.push( str );
this.content.push("\n");
}
StringBuffer.prototype.toString = function(){
return this.content.join("");
}
分享到:
评论

相关推荐

    HashMap.js

    模拟java中的HashMap类js类对象,可以与js的Array类对象配合使用

    基于JavaScript的HashMap实现

    在JavaScript中,HashMap是一种常用的键值对存储结构,它提供了快速的插入、删除和查找操作。...通过阅读和理解HashMap.js文件中的源码,开发者可以更好地掌握JavaScript的底层原理,并在实际项目中灵活应用。

    js-hashmap:javascript hasmap实现

    backbee / js-hashmap JavaScript哈希图实现##安装:bower install bb-js-hashmap --save ##特性: HashMap . length 返回HashMap对象中键/值对的数量。 HashMap . size 返回HashMap对象中键/值对的数量。 ## ...

    ds.js:键->值映射的Javascript哈希映射实现。 甚至适用于Javascript对象

    ds.js Javascript数据结构,用于存储原始和复杂的Javascript对象。 每个库文件都是数据结构的实现。 浏览器和Node.js支持 它支持以下浏览器: ...hashmap.min.js :389字节(gzip) set.min.js :508字节(gzip) h

    HashMap类

    HashMap类在Java编程...在阅读《HashMap1.js》和《HashMap.js》这两个文件时,可以深入分析其JavaScript版本的HashMap实现,虽然与Java版本可能有所不同,但基本的哈希映射原理是相通的,有助于拓宽对哈希表的理解。

    javascript实现自定义事件

    javascript实现自定义事件,纯javascript不含vbscript。 通过自定义的HashMap.js和EventManager.js实现自定义事件的监听addEvent和发布fireEvent

    HashMap:JS 上的 HashMap

    JavaScript 中的 HashMap 实现。 就像在 Java 中一样,但不是。 用法 var capacity = 16 , loadFactor = 0.75 , // default value hashMap = new HashMap ( capacity , loadFactor ) ; hashMap . put ( "someKey...

    一个基于js的HashMap

    下面我们将详细讨论如何在JavaScript中创建一个基于js的HashMap以及它的相关知识点。 首先,HashMap的核心在于其内部实现的哈希函数,它能将键转换为唯一的哈希码,使得我们可以快速定位到存储的值。在JavaScript中...

    js 版 java hashmap

    在描述中提到的"js版java HashMap"可能是指一个JavaScript实现的HashMap类,它模仿了Java中的HashMap数据结构,提供了更高效和灵活的操作。Java的HashMap是一个基于哈希表的Map接口实现,提供快速的插入、删除和查找...

    Javascript实现和操作HashMap

    在JavaScript中,HashMap是一种数据结构,它存储键值对,并且通过键来快速查找值。虽然JavaScript原生的`Map`对象提供了类似的功能,但在某些场景下,开发者可能需要自定义HashMap来满足特定的需求,例如优化性能...

    详解JavaScript中Hash Map映射结构的实现_.docx

    在JavaScript中,哈希映射(HashMap)是一种数据结构,用于高效地存储和检索键值对。虽然JavaScript的内置对象`Object`可以被用来模拟哈希映射的行为,但它并不是一个标准的哈希表,因此可能会导致一些潜在问题。...

    js 实现HashMap功能

    用js代码实现java中hashmap 的所有功能

    hashmap:HashMap JavaScript类,用于Node.js和浏览器。 键可以是任何东西,不会被字符串化

    适用于JavaScript的HashMap类 安装 使用 : $ npm install hashmap 使用凉亭: $ bower install hashmap 您可以从下载最新的稳定版本。 如果您喜欢冒险,可以下载,它通常是稳定的。 要运行测试: $ npm test ...

    JAVA遍历Map所有元素.doc

    java.util.HashMap hashmap = new java.util.HashMap(); for (int i = 0; i ; i++) { hashmap.put("" + i, "thanks"); } long bs = Calendar.getInstance().getTimeInMillis(); java.util.Iterator it = ...

    前端开源库-hashmap

    `HashMap`作为一种常见的数据结构,它在JavaScript中的应用广泛,特别是在处理大量数据时,可以提供比原生对象更快的查找、添加和删除操作。`HashMap`是基于键值对存储的数据结构,其核心特性是通过哈希函数快速定位...

    HashMap:用于构造解构 URL 哈希图的 JavaScript 助手

    用于构造/解构 URL 哈希映射的 JavaScript 助手。 例子 从对象构造哈希图 var myObj = { key: 'value', key2: 'value2' }; HashMap.buildHash(myObj); 输出:“#key=value&key2=value2” 从表单元素构建哈希图 ...

    详解JavaScript中Hash Map映射结构的实现

    JavaScript中的Hash Map是一种数据结构,用于高效地存储和检索键值对。虽然JavaScript的内置对象`Object`可以用来模拟简单的键值对存储,但它并非一个真正的哈希映射,因为`Object`的一些特性可能导致意料之外的行为...

    html js 用HashMap去掉html中select中的重复值

    本文将探讨如何利用JavaScript和Java中的HashMap(在JavaScript中,我们可以使用类似的数据结构,如`Map`)来消除`<select>`中的重复值。 首先,让我们了解HashMap或Map数据结构。HashMap是Java中的一种集合类,它...

    javaScript模拟的HashMap数据结构的对象

    javaScript模拟的HashMap数据结构,可以方便的put和get。几乎和Java中HashMap类的功能一模一样。非常好用的!

    java-echart.js柱状图、饼状图、折线图

    java-echart.js柱状图、饼状图、折线图 /** * 柱状图 * @param classRoom * @param req * @param resp * @param model * @return */ @RequestMapping(value = "/zhuzhuangtu") public String ...

Global site tag (gtag.js) - Google Analytics