1. 程式人生 > >hashMap 原理解析

hashMap 原理解析

先來手寫個簡單的雜湊沒破吧,歡迎補充

    

public class MyHashMap<K,V> {

    private Entry[] table;
    private static Integer CAPACITRY = 8;
    private int size = 0;


    public MyHashMap() {
        this.table = new Entry[CAPACITRY];
    }

    public int size() {
        return size;
    }

    public Object get(Object key) {
        int hash = key.hashCode();
        int i = hash % CAPACITRY;
        for(Entry<K,V> entry = table[i];entry != null; entry = entry.next){
            if (entry.k.equals(key)) {
                return entry.v;
            }
        }
        return null;
    }

    public V put(K key, V value) {
        int hash = key.hashCode();
        int i = hash % CAPACITRY;
        for(Entry<K,V> entry = table[i];entry != null; entry = entry.next){
            if (entry.k.equals(key)) {
                V oldValue = entry.v;
                entry.v = value;
                return oldValue;
            }
        }

        addEntry(key, value, i);

        return null;
    }

    private void addEntry(K key, V value, int i) {
        Entry entry = new Entry(key, value, table[i]);
        table[i] = entry;
        size++;
    }

    class Entry<K,V>{
        private K k;
        private V v;
        private Entry next;

        public Entry(K k, V v, Entry next) {
            this.k = k;
            this.v = v;
            this.next = next;
        }

        public K getK() {
            return k;
        }

        public void setK(K k) {
            this.k = k;
        }

        public V getV() {
            return v;
        }

        public void setV(V v) {
            this.v = v;
        }

        public Entry getNext() {
            return next;
        }

        public void setNext(Entry next) {
            this.next = next;
        }
    }

    public static void main(String[] args) {
        MyHashMap<String, String> myHashMap = new MyHashMap<>();
        myHashMap.put("my", "hashMap");
        myHashMap.put("my", "hashMapNew");
        System.out.println(myHashMap.ge