修正hashtableobj.set("length","0") bug
可以设置key忽略大小写
可以clone hashtable对象
可以 使用obj.valueOf("key","defalutvalue") 设置默认值等等
欢迎修正bug
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<
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 >
< 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/