[java]代码库
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) 回复
??
回复评论