/******************************************************************************************* * Object: Hashtable * Description: Implementation of hashtable * Author: Uzi Refaeli *******************************************************************************************/ //======================================= Properties ======================================== Hashtable.prototype.hash = null; Hashtable.prototype.keys = null; Hashtable.prototype.location = null; /** * Hashtable - Constructor * Create a new Hashtable object. */ function Hashtable(){ this.hash = new Array(); this.keys = new Array(); this.location = 0; } Hashtable.prototype.keySet = function(){ return this.keys; } /** * put * Add new key * param: key - String, key name * param: value - Object, the object to insert */ Hashtable.prototype.put = function (key, value){ if (value == null) return; if (this.hash[key] == null) this.keys[this.keys.length] = key; this.hash[key] = value; } /** * get * Return an element * param: key - String, key name * Return: object - The requested object */ Hashtable.prototype.get = function (key){ return this.hash[key]; } /** * remove * Remove an element * param: key - String, key name */ Hashtable.prototype.remove = function (key){ for (var i = 0; i < this.keys.length; i++){ //did we found our key? if (key == this.keys[i]){ //remove it from the hash this.hash[this.keys[i]] = null; //and throw away the key... this.keys.splice(i ,1); return; } } } /** * size * Return: Number of elements in the hashtable */ Hashtable.prototype.size = function (){ return this.keys.length; } /** * populateItems * Deprecated */ Hashtable.prototype.populateItems = function (){} /** * next * Return: true if theres more items */ Hashtable.prototype.next = function (){ if (++this.location < this.keys.length) return true; else return false; } /** * moveFirst * Move to the first item. */ Hashtable.prototype.moveFirst = function (){ try { this.location = -1; } catch(e) {/*//do nothing here :-)*/} } /** * moveLast * Move to the last item. */ Hashtable.prototype.moveLast = function (){ try { this.location = this.keys.length - 1; } catch(e) {/*//do nothing here :-)*/} } /** * getKey * Return: The value of item in the hash */ Hashtable.prototype.getKey = function (){ try { return this.keys[this.location]; } catch(e) { return null; } } /** * getValue * Return: The value of item in the hash */ Hashtable.prototype.getValue = function (){ try { return this.hash[this.keys[this.location]]; } catch(e) { return null; } } /** * getKey * Return: The first key contains the given value, or null if not found */ Hashtable.prototype.getKeyOfValue = function (value){ for (var i = 0; i < this.keys.length; i++) if (this.hash[this.keys[i]] == value) return this.keys[i] return null; } /** * toString * Returns a string representation of this Hashtable object in the form of a set of entries, * enclosed in braces and separated by the ASCII characters ", " (comma and space). * Each entry is rendered as the key, an equals sign =, and the associated element, * where the toString method is used to convert the key and element to strings. * Return: a string representation of this hashtable. */ Hashtable.prototype.toString = function (){ try { var s = new Array(this.keys.length); s[s.length] = "{"; for (var i = 0; i < this.keys.length; i++){ s[s.length] = this.keys[i]; s[s.length] = "="; var v = this.hash[this.keys[i]]; if (v) s[s.length] = v.toString(); else s[s.length] = "null"; if (i != this.keys.length-1) s[s.length] = ", "; } } catch(e) { //do nothing here :-) }finally{ s[s.length] = "}"; } return s.join(""); } /** * add * Concatanates hashtable to another hashtable. */ Hashtable.prototype.add = function(ht){ try { ht.moveFirst(); while(ht.next()){ var key = ht.getKey(); //put the new value in both cases (exists or not). this.hash[key] = ht.getValue(); //but if it is a new key also increase the key set if (this.get(key) != null){ this.keys[this.keys.length] = key; } } } catch(e) { //do nothing here :-) } finally { return this; } };
2008年1月3日 星期四
JavaScript 的 Hashtable 實作
JavaScript 的 Hashtable 實作
於
下午5:28
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言