Live2D

手写hashMap

public V put(K k, V v) {
        //在这里要判断一个size是否达到了一个扩容的标准
        if(size >= defaultLength * defaultLoader){
            up2size();
        }
        // 1 创建一个hash函数 根据key和hash函数算出数组下标
        int index = getIndext(k);
        Entry<K,V> entry = table[index];
        if(entry == null){
            //如果entry为null 说明table的index位置上没有元素 (如果没有数据这个 entry指针是空的)
            table[index] = newEntry(k,v,null);
            size++;
        }else{
            //如果有数据  就把 entry 拿到的老数据 放进这个新的 newEntry里面  (有数据就把指针指向老的数据)
            //如果indext位置不为空 说明indext位置有元素 那么就要进行一个替换,然后next指针指向老的数据
            table[index] = newEntry(k,v,entry);
        }
        return table[index].getValue();
    }
    
    private void up2size(){//扩容是默认长度的两倍
        Entry<K,V>[] newTable = new Entry[2 * defaultLength];
        
        //新创建数组以后 以前老数组里面的元素要对新数组进行再散列
        againHash(newTable);
    }

 

posted @ 2021-05-07 14:03  ΜΑΗΑΙΓΞ小白  阅读(47)  评论(0)    收藏  举报