共同学习Java源代码-数据结构-AbstractMap抽象类(二)

本文详细解析了Map的基本操作方法,包括键值对的删除、批量添加及清空等关键功能实现。通过具体代码示例,深入介绍了如何利用迭代器进行元素查找与移除,并探讨了putAll方法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    public V remove(Object key) {
        Iterator<Entry<K,V>> i = entrySet().iterator();
        Entry<K,V> correctEntry = null;
        if (key==null) {
            while (correctEntry==null && i.hasNext()) {
                Entry<K,V> e = i.next();
                if (e.getKey()==null)
                    correctEntry = e;
            }
        } else {
            while (correctEntry==null && i.hasNext()) {
                Entry<K,V> e = i.next();
                if (key.equals(e.getKey()))
                    correctEntry = e;
            }
        }


        V oldValue = null;
        if (correctEntry !=null) {
            oldValue = correctEntry.getValue();
            i.remove();
        }
        return oldValue;

    }

这个是删除的方法。

一样是先获取键值对的迭代器。

然后创建一个键值对变量correctEntry,

然后判断参数是否为空,如果为空就遍历键值对集合,遍历的条件就是correctEntry一定为空才可以遍历,如果键值对中有一个键为空,那么将该键值对赋给correctEntry。

如果参数不为空,就遍历键值对集合,遍历的条件就是correctEntry一定为空才可以遍历,如果键值对中有一个键和参数equals,那么该键值对赋给correctEntry。

然后创建一个泛型变量 oldValue,初始值为空。

判断如果correctEntry不为空,也就是上面的遍历找到对应的键值对了,将该键值对的值赋给oldValue,然后调用迭代器的删除方法删除该键值对。while循环中的判断条件就是correctEntry为空,如果找到了合适的键值对correctEntry就不为空了,就会跳出while循环,迭代器的迭代下标就会停留在该键值对那里。

最后返回oldValue。


public void putAll(Map<? extends K, ? extends V> m) {
    for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
        put(e.getKey(), e.getValue());
}

这个方法是将参数map的所有键值对添加到本map中的,其实就是循环遍历调用put方法。


public void clear() {
    entrySet().clear();
}

这个方法是清空所有键值对的方法,调用entrySet方法获取键值对集合,然后调用clear方法清除。


transient Set<K>        keySet;
transient Collection<V> values;

这两个成员变量分别是键的集合和值的集合,都是transient的不可被序列化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值