javascript hashtable实现代码 |
复制代码 代码如下: 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的其它方法使用简单,读者可以自己测试 (此略) |