分享
 
 
 

javascript:HashMap.js

王朝html/css/js·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/**

* used like java.lang.HashMap

*/

function testHashMap(){

alert("HashMap test begin:");

try{

}

catch(e){

alert(e);

}

alert("HashMap test end");

}

function HashMap()

{

private:

this.len=8;

this.table=new Array();

this.length=0;

this.hash=hash;

function hash(x){

var h = x.hashCode();

h += ~(h << 9);

h ^= (h >>> 14);

h += (h << 4);

h ^= (h >>> 10);

return h;

}

this.rehash=rehash;

function rehash() {

var oldTable = this.table;

this.table=new Array();

//transfer

for (var i = 0; i< oldTable.length; i++) {

var e = oldTable[i];

if (e != null) {

oldTable[i] = null;

do {

var next = e.next;

var j = this.indexFor(e.hash);

e.next = this.table[j];

this.table[j] = e;

e = next;

} while (e != null);

}

}

//alert("rehash to :"+this.len);

}

this.indexFor=indexFor;

function indexFor(h) {

var index= h & (this.len-1);

return index;

}

function Entry(h,k,v,n){

this.value = v;

this.next = n;

this.key = k;

this.hash = h;

this.getKey=getKey;

function getKey() {

return this.key;

}

this.getValue=getValue;

function getValue() {

return this.value;

}

this.setValue=setValue;

function setValue(newValue) {

var oldValue = this.value;

this.value = newValue;

return oldValue;

}

this.equals=equals;

function equals(o) {

var e = o;

var k1 = this.getKey();

var k2 = e.getKey();

var v1 = this.getValue();

var v2 = e.getValue();

return (k1.equals(k2) && v1.equals(v2));

}

this.hashCode=hashCode;

function hashCode() {

return this.key.hashCode() ^ this.value.hashCode();

}

this.toString=toString;

function toString() {

return this.getKey() + "=" + this.getValue();

}

}

function HashIterator(table,index,ne){

this.table=table;

this.ne=ne;

this.index=index;

this.current=null;

this.hasNext=hasNext;

function hasNext() {

return this.ne != null;

}

this.next=next;

function next() {

var e = this.ne;

if (e == null)

throw "No such Element";

var n = e.next;

var t = this.table;

var i = this.index;

while (n == null && i > 0)

n = t[--i];

this.index = i;

this.ne = n;

this.current=e;

return this.current;

}

}

public:

this.size=size;

function size() {

return this.length;

}

this.isEmpty=isEmpty;

function isEmpty() {

return this.length == 0;

}

this.get=get;

function get(key) {

var hash =this.hash(key);

var i = this.indexFor(hash);

var e = this.table[i];

while (true) {

if (e ==null)

return null;

if (e.hash == hash && key.equals(e.key))

return e.value;

e = e.next;

}

}

this.containsKey=containsKey;

function containsKey(key) {

var hash = this.hash(key);

var i = this.indexFor(hash);

var e = this.table[i];

while (e != null) {

if (e.hash == hash && key.equals(e.key))

return true;

e = e.next;

}

return false;

}

this.put=put;

function put(key,value) {

var hash = this.hash(key);

var i = this.indexFor(hash);

for (var e = this.table[i]; e != null; e = e.next) {

if (e.hash == hash && key.equals(e.key)) {

var oldValue = e.value;

e.value = value;

return oldValue;

}

}

this.addEntry(hash, key, value, i);

var r=Math.ceil(this.length * 1.5);

if(r > this.len){

this.len= this.len << 1;

this.rehash();

}

return null;

}

this.putAll=putAll;

function putAll(map){

var mod=false;

for(var it=map.iterator();it.hasNext();){

var e=it.next();

if(this.put(e.getKey(),e.getValue())) mod=true;

}

}

this.remove=remove;

function remove(key) {

var e = this.removeEntryForKey(key);

return (e ==null ? null : e.value);

}

this.removeEntryForKey=removeEntryForKey;

function removeEntryForKey(key) {

var hash = this.hash(key);

var i = this.indexFor(hash);

var prev = this.table[i];

var e = prev;

while (e != null) {

var next = e.next;

if (e.hash == hash && key.equals(e.key)) {

this.length--;

if (prev.equals(e))

this.table[i] = next;

else

prev.next = next;

return e;

}

prev = e;

e = next;

}

return e;

}

this.clear=clear;

function clear() {

for (var i = 0; i < this.table.length; i++)

this.table[i] = null;

this.length = 0;

}

this.containsValue=containsValue;

function containsValue(value) {

if (value == null) return false;

var tab = this.table;

for (var i = 0; i < tab.length ; i++)

for (var e = tab[i] ; e != null ; e = e.next)

if (value.equals(e.value))

return true;

return false;

}

this.addEntry=addEntry;

function addEntry(hash, key, value, bucketIndex) {

this.table[bucketIndex] = new Entry(hash, key, value, this.table[bucketIndex]);

this.length++;

}

this.iterator=iterator;

function iterator(){

var i=this.table.length;

var next=null;

while(i>0 && next==null){

next=this.table[--i];

}

return new HashIterator(this.table,i,next);

}

this.hashCode=hashCode;

function hashCode(){

var h=0;

for(var it=this.iterator();it.hasNext();){

h+=it.next().hashCode();

}

return h;

}

this.equals=equals;

function equals(map){

if(map.size()!=this.size()) return false;

for(var it=this.iterator();it.hasNext();){

var e=it.next();

var key=e.getKey();

var value=e.getValue();

if(!value.equals(map.get(key))) return false

}

return true;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有