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访问器属性实例分析
Dec 30 Javascript
学习JavaScript设计模式之模板方法模式
Jan 20 Javascript
js选择器全面解析
Jun 27 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
Sep 09 Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
微信小程序实现弹出层效果
May 26 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
Mar 15 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 Javascript
javascript+Canvas实现画板功能
Jun 23 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
php学习之function的用法
2012/07/14 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
CI框架常用函数封装实例
2016/11/21 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
JS判断数组四种实现方法详解
2020/06/29 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
JS如何生成动态列表
2020/09/22 Javascript
python 开发的三种运行模式详细介绍
2017/01/18 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
实习介绍信模板
2015/01/30 职场文书
党员个人自我评价
2015/03/03 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
培训计划通知
2015/07/15 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python