简单的hashmap的实现

package com;






public class linkList {

public final class Node{
public Object k;
public Object v;
public Node next=null;
public Node(Object k,Object v,Node next){
this.k=k;
this.v=v;
this.next=next;
}
}
static Node [] s= new Node[16];
public  void  put(Object k,Object v){
if(k==null) return;

int hashCode=k.hashCode()%s.length;
if(s[hashCode]==null){
s[hashCode]=new Node (k,v,null); 
}else{
Node n=s[hashCode];
while (true){
if(n.k==k){
n.v=v;
break;
}else{
   if(n.next==null){
n.next=new Node (k,v,null);
break;
}else{
n=n.next;
}
}
}
}

}
public  Object get(Object k){
Object v=null;
if(k==null)
return null;
int hashCode=k.hashCode()%s.length;
Node n=s[hashCode];
while(true){
if(n!=null){
if(n.k==k){
v=n.v;
return  v;
}else{
if(n.next!=null){
n=n.next;
}else{
return null;
}

}
}else{
return null;
}

}

}
public  void remove1(Object k){//这是我自己总结的  ,开始一直没明白,开始以为跟之前的添加一样,删除的时候吧节点设置为空就行了,其实不想,看了hashmap,remove源码受到启发,设置上一个节点初始为空prv 就改变了数组
if(k==null)
return ;
int hashCode=k.hashCode()%s.length;
Node[] tab = this.s;
int index = hashCode & (tab.length - 1);

Node e=tab[index];
Node prv =null;
while(true){
if(e!=null){
if(e.k==k){
if(prv==null){//如果删除的是第一个节点
tab[index]=e.next;
}else{
 prv.next=e.next;
}


break ;
}else{
if(e.next!=null){
prv=e;
e=e.next;
}else{
return ;
}

}
}else{
break ;
}

}

}
    public void remove(Object k) {//这是hasmap 用的remove 方法
        Node[] tab = this.s;
        int hashCode=k.hashCode()%s.length;
        int index = hashCode & (tab.length - 1);
        for ( Node e = tab[index], prev = null;
                e != null; prev = e, e = e.next) {
            if (k.equals(e.k)) {
                if (prev == null) {
                    tab[index] = e.next;
                } else {
                    prev.next = e.next;
                }
            }
        }
    }
public static void main(String[] args) {
linkList linkList= new linkList();
linkList.put("c", "1211212");
linkList.put("s", "11111");
linkList.remove1("c");
System.out.println(linkList.get("s"));
System.out.println(linkList.get("c"));
}

}
 

猜你喜欢

转载自blog.csdn.net/l_mr_l/article/details/78423331