Java手写简易版HashMap的使用(存储+查找)
HashMap的基本结构
packagecom.liuyuhe;
publicclassNode{
inthash;
Objectkey;
Objectvalue;
Nodenext;
}
packagecom.liuyuhe;
publicclassMyHashMap{
Node[]table;//位桶数组
intsize;//存放键值对的个数
publicMyHashMap(){
table=newNode[16];
}
}
put()方法存储键值对
publicvoidput(Objectkey,Objectvalue){
NodenewNode=newNode();
newNode.hash=myHash(key.hashCode(),table.length);
newNode.key=key;
newNode.value=value;
newNode.next=null;
Nodetemp=table[newNode.hash];
NodeiterLast=null;
if(temp==null){
table[newNode.hash]=newNode;
}else{
while(temp!=null){
if(temp.key.equals(key)){
temp.value=value;
return;
}else{
iterLast=temp;
temp=temp.next;
}
}
iterLast.next=newNode;
}
++size;
}
publicintmyHash(intv,intlength){
System.out.println("hashinmyHash:"+(v&(length-1)));
returnv&(length-1);
}
重写toString()方法打印Map内容
@Override
publicStringtoString(){
StringBuildersb=newStringBuilder();
sb.append("{");
booleanisFirst=true;
//遍历数组
for(inti=0;iget()方法查找键值对
publicObjectget(Objectkey){
inthash=myHash(key.hashCode(),table.length);
Objectvalue=null;
if(table[hash]!=null){
Nodetemp=table[hash];
while(temp!=null){
if(temp.key.equals(key)){
value=temp.value;
break;
}else{
temp=temp.next;
}
}
}
returnvalue;
}
增加泛型(完整代码)
packagecom.liuyuhe; publicclassNode{ inthash; Kkey; Vvalue; Nodenext; }
packagecom.liuyuhe; publicclassMyHashMap{ Node[]table;//位桶数组 intsize;//存放键值对的个数 publicMyHashMap(){ table=newNode[16]; } publicvoidput(Kkey,Vvalue){ NodenewNode=newNode(); newNode.hash=myHash(key.hashCode(),table.length); newNode.key=key; newNode.value=value; newNode.next=null; Nodetemp=table[newNode.hash]; NodeiterLast=null; if(temp==null){ table[newNode.hash]=newNode; }else{ while(temp!=null){ if(temp.key.equals(key)){ temp.value=value; return; }else{ iterLast=temp; temp=temp.next; } } iterLast.next=newNode; } ++size; } @SuppressWarnings("unchecked") publicVget(Kkey){ inthash=myHash(key.hashCode(),table.length); Vvalue=null; if(table[hash]!=null){ Nodetemp=table[hash]; while(temp!=null){ if(temp.key.equals(key)){ value=(V)temp.value; break; }else{ temp=temp.next; } } } returnvalue; } publicintmyHash(intv,intlength){ System.out.println("hashinmyHash:"+(v&(length-1))); returnv&(length-1); } @Override publicStringtoString(){ StringBuildersb=newStringBuilder(); sb.append("{"); booleanisFirst=true; //遍历数组 for(inti=0;i 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。