- 这里再补充几个手撕HashMap的方法
1、remove()
- remove 方法参数值应该是键值对的键的值,当传入键值对的键的时候,remove 方法会删除对应的键值对
- 需要利用我们自己先前创建的 hashcodeList 来实现,hashcodeList 存入了所有被使用的 hashcode 值,方便后续的操作
- 在 put() 中,当添加新的键值对时,就会调用
hashcodeList.add(hashcode);
来存入添加的 hashcode 值 - hashcodeList:
/**
* 不需要遍历数组,大大减少了代码量,直接存入hashcode的值
* 用来记录被使用的hashcode,方便后续其他方法的操作
*/
List<Integer> hashcodeList = new ArrayList<>();
- remove() 方法的思路:
- 根据传入的 key 的值,遍历 hashmap
- 当 key 的值相同时,删除它,与此同时遍历 hashcodeList
- 当 hashcodeList 中存储的哈希值与 key 通过 hashcode(key) 方法后得到的哈希值相等时,删除这个 hashcodeList 值
- 代码:
/**
* 删除传入的key值所对应的键值对对象
*
* @param key 传入的key
*/
@Override
public void remove(K key) {
int hashcode = hashcode(key);
for (Entry<K, V> entry : mapArr[hashcode]
) {
//要把hashcodeList中的hashcode删除
hashcodeList.removeIf(integer -> hashcode(entry.getKey()) == integer);
//删除 mapArr
if (entry.getKey().equals(key)) {
mapArr[hashcode].remove();
}
}
}
标签:HashMap,删除,hashcodeList,remove,hashcode,键值,key
From: https://www.cnblogs.com/lynnier/p/17270880.html