美文网首页
仿源码写一个简单的Map

仿源码写一个简单的Map

作者: Stringer | 来源:发表于2017-01-07 20:18 被阅读6次

public class MyMap002 {
    LinkedList[] arr=new LinkedList[999];   //Map底层结构是链表数组
    int size;

    public void put(Object key,Object value){
        MyEntry e=new MyEntry(key,value);

        int hash=key.hashCode();
        hash=hash<0?-hash:hash;     //确保hash为正数
        int a=hash%arr.length;    //尽可能的均摊到arr.length个数中
        if(arr[a]==null){   //未冲突
            LinkedList list=new LinkedList();
            arr[a]=list;
            list.add(e);
        }else {             //有冲突
            LinkedList list=arr[a];
            for(int i=0;i<list.size();i++){
                MyEntry e1 = (MyEntry) list.get(i);
                if(e1.key.equals(key)){
                    e1.value=value;     //键值重复,覆盖前一个value
                }
            }
            arr[a].add(e);
        }

    }

    public Object get(Object key){
        int a=key.hashCode()%arr.length;
        if(arr[a]!=null){
            LinkedList list=arr[a];
            for(int i=0;i<list.size();i++){
                MyEntry e = (MyEntry) list.get(i);
                if(e.key.equals(key)){
                    return e.value;
                }
            }
        }
        return null;
    }


    public static void main(String[] args) {
        MyMap002 m=new MyMap002();
        m.put("aa","AA");
        m.put("bb","BB");
        m.put("cc","CC");
        m.put("cc","DD");
        String s=(String)m.get("cc");
        System.out.println(s);
    }
}



class MyEntry{
    Object key;
    Object value;

    public MyEntry(Object key, Object value) {
        this.key = key;
        this.value = value;
    }
}

</br>
HashSet底层用HashMap实现,把存入HashSet的值放入HashMap的key中,HashMap的value中存放static final的Object对象

相关文章

网友评论

      本文标题:仿源码写一个简单的Map

      本文链接:https://www.haomeiwen.com/subject/izwfbttx.html