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;i
get()方法查找键值对
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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。