javascript hashtable 修正版 hashtable hashset 下载

修正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://files.cnblogs.com/penghaitao/jshashtable-2.1.zip

by phito http://www.cnblogs.com/penghaitao/

转载于:https://www.cnblogs.com/penghaitao/archive/2010/12/30/1921519.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值