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 String 对象
Apr 25 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
Dec 28 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
JSON字符串转JSON对象
Jul 31 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
使用Bootstrap美化按钮实例代码(demo)
Feb 03 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
JS中Map和ForEach的区别
Feb 05 Javascript
使用Vue制作图片轮播组件思路详解
Mar 21 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 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实现算式验证码和汉字验证码实例
2015/03/09 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python书单 不将就
2017/07/11 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
Python中optparser库用法实例详解
2018/01/26 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python变量命名的7条建议
2019/07/04 Python
python pygame实现球球大作战
2019/11/25 Python
Python-openCV开运算实例
2020/07/05 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
python爬虫工具例举说明
2020/11/30 Python
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
广告业务员岗位职责
2014/02/06 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
罚款通知怎么写
2015/04/22 职场文书
Python OpenCV实现图像模板匹配详解
2022/04/07 Python