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); |
} |
by: 发表于:2018-05-24 10:41:35 顶(0) | 踩(0) 回复
??
回复评论