public V put(K k, V v) { //在这里要判断一个size是否达到了一个扩容的标准 if(size >= defaultLength * defaultLoader){ up2size(); } // 1 创建一个hash函数 根据key和hash函数算出数组下标 int index = getIndext(k); Entry 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[] newTable = new Entry[2 * defaultLength]; //新创建数组以后 以前老数组里面的元素要对新数组进行再散列 againHash(newTable); }