javascript hashtable 修正版 下载

  修正hashtableobj.set("length","0") bug

  可以设置key忽略大小写

  可以clone hashtable对象

  可以 使用obj.valueOf("key","defalutvalue") 设置默认值等等

  欢迎修正bug

  

复制代码 代码如下:

  <html>

  <head>

  <script type="text/javascript">

  // Authors Birdshome, 麻袋@博客园 改版 phito,彭海涛

  Object.prototype.Clone = function()

  {

  var objClone;

  if ( this.constructor == Object ) objClone = new this.constructor();

  else objClone = new this.constructor(this.valueOf());

  for ( var key in this )

  {

  if ( objClone[key] != this[key] )

  {

  if ( typeof(this[key]) == 'object' )

  {

  objClone[key] = this[key].Clone();

  }

  else

  {

  objClone[key] = this[key];

  }

  }

  }

  objClone.toString = this.toString;

  objClone.valueOf = this.valueOf;

  return objClone;

  }

  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 Object();

  this.set = hashtable_set;

  this.valueOf = hashtable_valueOf;

  this.clone = hashtable_clone;

  this.ignoreupperlower = true;

  //是否忽略大小写

  }

  /*=======Private methods for internal use only========*/

  function hashtable_clone(){

  return this.Clone();

  }

  function hashtable_put(key, value) {

  if (this.ignoreupperlower && typeof(key) == "string") {

  key = key.toUpperCase();

  }

  if (key == null || value == null) {

  throw "NullPointerException {" + key + "},{" + value + "}";

  } else {

  this.hashtable[key] = value;

  }

  }

  function hashtable_set(key, value) {

  if (this.ignoreupperlower && typeof(key) == "string") {

  key = key.toUpperCase();

  }

  if (this.containsKey(key)) {

  this.remove(key);

  }

  this.put(key, value);

  }

  function hashtable_get(key) {

  if (this.ignoreupperlower && typeof(key) == "string") {

  key = key.toUpperCase();

  }

  return this.hashtable[key];

  }

  function hashtable_valueOf(key, defvalue) {

  var ret = this.get(key);

  if (typeof(ret) == "undefined") {

  return defvalue;

  }

  return ret;

  }

  function hashtable_remove(key) {

  if (this.containsKey(key)) {

  delete this.hashtable[key] ;

  }

  }

  function hashtable_isEmpty() {

  return (parseInt(this.size()) == 0) ? true: false;

  }

  function hashtable_size() {

  var size = 0;

  for (var i in this.hashtable) {

  if(typeof(this.hashtable[i])=="function"){

  continue;

  }

  if (this.hashtable[i] != null) {

  size++;

  }

  }

  return size;

  }

  function hashtable_toString() {

  var result = "";

  for (var i in this.hashtable) {

  if(typeof(this.hashtable[i])=="function"){

  continue;

  }

  if (this.hashtable[i] != null) {

  result += "{" + i + ":" + this.hashtable[i] + "}\n";

  }

  }

  return result;

  }

  function hashtable_clear() {

  this.hashtable = new Object();

  }

  function hashtable_containsKey(key) {

  if (this.ignoreupperlower && typeof(key) == "string") {

  key = key.toUpperCase();

  }

  var exists = false;

  for (var i in this.hashtable) {

  if(typeof(this.hashtable[i])=="function"){

  continue;

  }

  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(typeof(this.hashtable[i])=="function"){

  continue;

  }

  if (this.hashtable[i] == value) {

  contains = true;

  break;

  }

  }

  }

  return contains;

  }

  function hashtable_values() {

  var values = new Object();

  for (var i in this.hashtable) {

  if(typeof(this.hashtable[i])=="function"){

  continue;

  }

  if (this.hashtable[i] != null) values.push(this.hashtable[i]);

  }

  return values;

  }

  function hashtable_keys() {

  var keys = new Object();

  for (var i in this.hashtable) {

  if(typeof(this.hashtable[i])=="function"){

  continue;

  }

  keys.push(i);

  }

  return keys;

  }

  function test() {

  var ht = new Hashtable();

  ht.put("3", "Jackson");

  ht.put("2", "Tom");

  ht.put("4", 3);

  ht.set("length", 445555);

  ht.set("ddd", "ddd");

  ht.set("index", "ddd");

  var et = ht.toString();

  ht.ignoreupperlower = false;

  //忽略大小写

  ht.clear();

  ht.put("3", "Jackson");

  ht.put("2", "Tom");

  ht.remove("2");

  ht.put("4", 3);

  ht.set("length", 5);

  //如果用new Array的话该项会设置Array的长度

  ht.set("index", "ddd");

  ht.set("ddd", "ddd");

  alert(et + "" + ht.toString() + "" + ht.size());

  var cloneobj=ht.clone();

  alert(cloneobj.toString());

  }

  </script>

  </head>

  <body onload="test()">

  </body>

  </html>

  如果你想使用功能更好的hashtable和hashset请下载: http://xiazai.glzy8.com/201012/yuanma/jshashtable.rar