javascript hashtable实现代码


Posted in Javascript onOctober 13, 2009
var arr = new Array(); 
arr['item1'] = 'the value of item 1 '; 
arr['item2'] = 'the value of item 2 '; 
alert(arr['item1']); 
alert(arr['item2']);

但上述功能,不符我们的实际要求,另外查询遍历也不方便,我们需要在Array的基础上进行扩展,
下面我们可以用js中的数组来实现类似的hashtable的功能,
function Hashtable(){ 
this.clear = hashtable_clear; 
this.containsKey = hashtable_containsKey; 
this.containsValue = hashtable_containsValue; 
this.get = hashtable_get; 
this.isEmpty = hashtable_isEmpty; 
this.keys = hashtable_keys; 
this.put = hashtable_put; 
this.remove = hashtable_remove; 
this.size = hashtable_size; 
this.toString = hashtable_toString; 
this.values = hashtable_values; 
this.hashtable = new Array(); 
} 
function hashtable_clear(){ 
this.hashtable = new Array(); 
} 
function hashtable_containsKey(key){ 
var exists = false; 
for (var i in this.hashtable) { 
if (i == key && this.hashtable[i] != null) { 
exists = true; 
break; 
} 
} 
return exists; 
} 
function hashtable_containsValue(value){ 
var contains = false; 
if (value != null) { 
for (var i in this.hashtable) { 
if (this.hashtable[i] == value) { 
contains = true; 
break; 
} 
} 
} 
return contains; 
} 
function hashtable_get(key){ 
return this.hashtable[key]; 
} 
function hashtable_isEmpty(){ 
return (this.size == 0) ? true : false; 
} 
function hashtable_keys(){ 
var keys = new Array(); 
for (var i in this.hashtable) { 
if (this.hashtable[i] != null) 
keys.push(i); 
} 
return keys; 
} 
function hashtable_put(key, value){ 
if (key == null || value == null) { 
throw 'NullPointerException {' + key + '},{' + value + '}'; 
}else{ 
this.hashtable[key] = value; 
} 
} 
function hashtable_remove(key){ 
var rtn = this.hashtable[key]; 
//this.hashtable[key] =null; 
this.hashtable.splice(key,1); 
return rtn; 
} 
function hashtable_size(){ 
var size = 0; 
for (var i in this.hashtable) { 
if (this.hashtable[i] != null) 
size ++; 
} 
return size; 
} 
function hashtable_toString(){ 
var result = ''; 
for (var i in this.hashtable) 
{ 
if (this.hashtable[i] != null) 
result += '{' + i + '},{' + this.hashtable[i] + '}\n'; 
} 
return result; 
} 
function hashtable_values(){ 
var values = new Array(); 
for (var i in this.hashtable) { 
if (this.hashtable[i] != null) 
values.push(this.hashtable[i]); 
} 
return values; 
}

Hastable类使用方法:
//实例化一个自定义的哈希表类 
var hashTable = new Hashtable(); 
hashTable.put(0,'abc'); //0为key, 'abc'为value 
hashTable.put(1,'123'); 
hashTable.put(2,'88a'); 
hashTable.put(3,'88a'); 
//遍历hashtable, 相当于c#和java中的foreach 
for (var key in hashTable.keys()){ /* 用keys方法 */ 
alert(hashTable.get(key)); //按key遍历value 
} 
//遍历hashtable, 相当于c#和java中的foreach 
for (var key in hashTable.hashtable)){ /* 用hashtable属性 */ 
alert(hashTable.get(key)); //按key遍历value 
} 
alert(hashTable.containsKey(1)); //返回true 
alert(hashTable.containsKey(4)); //因为不存在key为4的,返回false 
alert(hashTable.containsValue('888')); //返回true 
alert(hashTable.containsValue('mobidogs')); //因为不存在value为'mobidogs'的,返回false 
hashTable.remove(1); //移除key为1的元素 
alert(hashTable.containsKey(1)); //因为key为1的元素已被上行的reomve()方法移除,所以返回false 
//关于hastable的其它方法使用简单,读者可以自己测试 (此略)
Javascript 相关文章推荐
JavaScript QueryString解析类代码
Jan 17 Javascript
javascript实现获取字符串hash值
May 10 Javascript
Bootstrap基础学习
Jun 16 Javascript
javaScript实现滚动新闻的方法
Jul 30 Javascript
js对字符串进行编码的方法总结(推荐)
Nov 10 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
jQuery文字轮播特效
Feb 12 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
用图片替换checkbox原始样式并实现同样的功能
Nov 15 Javascript
Promise扫盲贴
Jun 24 Javascript
JS通用方法触发点击事件代码实例
Feb 17 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
JavaScript 核心参考教程 内置对象
Oct 13 #Javascript
jQuery Ajax之load()方法
Oct 12 #Javascript
jQuery Ajax之$.get()方法和$.post()方法
Oct 12 #Javascript
JS 文件本身编码转换 图文教程
Oct 12 #Javascript
jQuery 行级解析读取XML文件(附源码)
Oct 12 #Javascript
jquery select选中的一个小问题
Oct 11 #Javascript
Jquery 表单取值赋值的一些基本操作
Oct 11 #Javascript
You might like
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
JS面向对象编程详解
2016/03/06 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
介绍Python中几个常用的类方法
2015/04/08 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python创建模块及模块导入的方法
2015/05/27 Python
Python 26进制计算实现方法
2015/05/28 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
python使用folium库绘制地图点击框
2018/09/21 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
Python箱型图处理离群点的例子
2019/12/09 Python
opencv python如何实现图像二值化
2020/02/03 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
高等教育学专业自荐书
2014/06/17 职场文书
工地标语大全
2014/06/18 职场文书
董事会决议范本
2015/07/01 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python