final HashMap.Node<K, V> removeNode(int hash, Object key, Object value, boolean matchValue, boolean movable) {
//获取临时变量tab存储table数组
HashMap.Node[] tab;
HashMap.Node p;
int n;
int index;
//获取n为table长度,index为hash后的位置
//如果当前table已经初始化,且index位置上的元素不为空,则进入if判断,准备查找需要删除的元素
if ((tab = this.table) != null && (n = tab.length) > 0 && (p = tab[index = n - 1 & hash]) != null) {
HashMap.Node<K, V> node = null;
Object k;
//如果当前index位置上第一个元素则是需要被删除的元素,则将node指定为p,开始删除
//如果不是则进入else循环开始查找
if (p.hash == hash && ((k = p.key) == key || key != null && key.equals(k))) {
node = p;
} else {
HashMap.Node e;
//如果当前index位置上下一个元素不为空,则判断类型进行查找
if ((e = p.next) != null) {
HashMap源码解析(四) removeNode方法
最新推荐文章于 2022-05-17 21:04:56 发布