HashMap的equals方法

一,什么是HashMap

HashMap是个散列表,存储的形式是 key-value 对应方式,根据键值的 HashCode 值来存储数据。

HashMap最多只支持一个键值 key 为 null 的数据,之后的键值 key 为 null 的会覆盖之前的数据。

HashMap的存储是无序的。

HashMap的 键值 key 和 数据 value 类型可以不同,可以是同为String类型的 key 和 value ,也可以是 int类型 的 key 和 String 类型的 value 。

二,HashMap判断是否相等

HashMap使用AbstractMap的equals方法,源码分析如下:

//假设伪代码 a.equals(o) a与o都是Map类型的
public boolean equals(Object o) {
        //判断地址是否相同,是返回true
        if (o == this)
            return true;
        //判断输入o是否为Map类型,不是返回false
        if (!(o instanceof Map))
            return false;
        //将被比较的对象 o 赋给中间量 m
        Map<?,?> m = (Map<?,?>) o;
        //比较 m 和 a 的size大小是否相等,不相等返回false
        if (m.size() != size())
            return false;
        
        try {
            //定义迭代器 i 迭代 a
            Iterator<Entry<K,V>> i = entrySet().iterator();
            //迭代每个迭代器 i 中的每个元素
            while (i.hasNext()) {
                //定义一个映射条目 e 为 迭代器 i 的下一个元素
                Entry<K,V> e = i.next();
                //定义键值和值
                K key = e.getKey();
                V value = e.getValue();
                //判断值是否为null,进行下个判断
                if (value == null) {
                    //判断 m 中键值是否为 e.getKey() 是否得到返回null 同时 m 中是否有键值为                 
                    e.getKey()的键值,不满足则返回false
                    if (!(m.get(key)==null && m.containsKey(key)))
                        return false;
                } else {
                    //如果value != null ,判断 value 值是否等于 m根据键值 key
                    获得的 value 值相等,如果不是返回false
                    if (!value.equals(m.get(key)))
                        return false;
                }
            }
        } catch (ClassCastException unused) {
            //出现类转换错误返回 false
            return false;
        } catch (NullPointerException unused) {
            //出现空指针错误返回 false
            return false;
        }

        return true;
    }

== 是比较引用地址是否相等,HashMap.equals()是比较Map中的每个键值 key 和 值 value 是否相等。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值