为什么 AbstractCollection 不实现 equals()?

2022-10-17Java开发问题
3

本文介绍了为什么 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()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

如何使用 JAVA 向 COM PORT 发送数据?
How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)...
2024-08-25 Java开发问题
21

如何使报表页面方向更改为“rtl"?
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)...
2024-08-25 Java开发问题
19

在 Eclipse 项目中使用西里尔文 .properties 文件
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)...
2024-08-25 Java开发问题
18

有没有办法在 Java 中检测 RTL 语言?
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)...
2024-08-25 Java开发问题
11

如何在 Java 中从 DB 加载资源包消息?
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)...
2024-08-25 Java开发问题
13

如何更改 Java 中的默认语言环境设置以使其保持一致?
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)...
2024-08-25 Java开发问题
13