function HashMap(){
/**大小 */
var size = 0;
/**初始数组 */
var table=[];
/**初始数组长度 */
var length = 16;
/**扩容阈值 */
var threshold = 0.75*length;
/**ascii码拼接成hashcode */
this.hashcode=function(str){
var hashcode = '';
for(var i = 0;i<=str.length-1;i++){
hashcode+=str.charCodeAt(i);
}
return hashcode;
}
/**哈希函数散列扰动 jdk1.8内置*/
this.hash = function(h){
h ^= (h >>> 16);
return h;
}
/**取下标 */
this.indexFor = function(h){
return h&(length-1);
}
this.tableValue = function(){
return table;
}
/**增加链表key,value的保存*/
this.addEntry = function(key,value,index){
var e = table[index];
table[index]={key:key,value:value,next:e}
if(size++>threshold)
{
length*=2;
threshold=length*0.75;
}
}
/**put.entry */
this.put = function(key,value){
var hashcode = this.hashcode(key);
var hash = this.hash(hashcode);
var index = this.indexFor(hash);
for(var e=table[index];e!=null&&e!=undefined;e=e.next){
if(e.key == key){
var oldvalue = e.value;
e.value = value;
return oldvalue;
}
}
this.addEntry(key,value,index);
}
/**get.entry */
this.get = function(key){
var hashcode = this.hashcode(key);
var hash = this.hash(hashcode);
var index = this.indexFor(hash);
for(var e=table[index];e!=null&&e!=undefined;e=e.next){
if(e.key == key){
return e.value;
}
return undefined;
}
}
/**remove.entry */
this.remove =function(key){
var hashcode = this.hashcode(key);
var hash = this.hash(hashcode);
var index = this.indexFor(hash);
var preNode;
for(var e=table[index];e!=null&&e!=undefined;preNode = e,e=e.next)
{
if(e.key == key){
if(preNode == null||preNode==undefined)
{
table[index] = e.next;
}else
{
preNode.next=e.next;
}
return e.value;
}
}
}
}
var hs = new HashMap();
hs.put("1243","1");
console.log(hs.get("1243"));
hs.remove("1243");
console.log(hs.get("1243"));
hs.put("1283","2");
hs.put("1283","4");
console.log(hs.get("1283"));
console