为什么 AbstractCollection 不实现 equals()? [英] Why AbstractCollection does not implement equals()?

查看:55
本文介绍了为什么 AbstractCollection 不实现 equals()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你知道吗:

地图m1 = new HashMap<对象,对象>();地图<对象,对象>m2 = new HashMap<对象,对象>();System.out.println("m1.equals(m2) = "+m1.equals(m2));System.out.println("m1.keySet().equals(m2.keySet()) = "+m1.keySet().equals(m2.keySet()));System.out.println("m1.entrySet().equals(m2.entrySet()) = "+m1.entrySet().equals(m2.entrySet()));System.out.println("m1.values().equals(m2.values()) = "+m1.values().equals(m2.values()));

会输出:

m1.equals(m2) = truem1.keySet().equals(m2.keySet()) = truem1.entrySet().equals(m2.entrySet()) = truem1.values().equals(m2.values()) = false

这是因为 AbstractCollection(HashMap$Values 继承自)没有覆盖 #equals().p>

你知道为什么会这样吗?

解决方案

根据Collection#equals()Collection 没有通用的 equals() 方法,因此 AbstractCollection 无法提供.

请注意,HashMap$Values 既不是 Set 也不是 List,因此很困惑,从某种意义上说,它不支持 equals().

Did you know that :

Map<Object,Object> m1 = new HashMap<Object, Object>();
Map<Object,Object> m2 = new HashMap<Object, Object>();
System.out.println("m1.equals(m2) = "+m1.equals(m2));
System.out.println("m1.keySet().equals(m2.keySet()) = "
            +m1.keySet().equals(m2.keySet()));
System.out.println("m1.entrySet().equals(m2.entrySet()) = "
            +m1.entrySet().equals(m2.entrySet()));
System.out.println("m1.values().equals(m2.values()) = "
            +m1.values().equals(m2.values()));

would output :

m1.equals(m2) = true
m1.keySet().equals(m2.keySet()) = true
m1.entrySet().equals(m2.entrySet()) = true
m1.values().equals(m2.values()) = false

This is caused by the fact that AbstractCollection (which HashMap$Values inherits from) does not overrides #equals().

Do you have an idea why this is so ?

解决方案

Per the contract of Collection#equals(), there is no general-purpose equals() methods for Collections, and thus AbstractCollection cannot provide one.

Note that HashMap$Values is neither a Set nor a List, thus the quandary and in a sense the reason it does not support equals().

这篇关于为什么 AbstractCollection 不实现 equals()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆