当前位置: 首页 > 面试题库 >

为什么AbstractCollection不实现equals()?

松嘉运
2023-03-14
问题内容

你知道吗 :

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()));

将输出:

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

这是由于AbstractCollectionHashMap$Values继承自)未覆盖的事实引起的#equals()

您知道为什么会这样吗?


问题答案:

根据的合同Collection#equals(),没有针对Collections
的通用equals()方法,因此AbstractCollection无法提供一个。

请注意,HashMap$Values它既不是Set也不是List,因此既不是数量也不是它不支持的原因equals()



 类似资料:
  • 问题内容: 有谁知道为什么 不执行?这意味着您无法对排序,这在我看来有点奇怪。 讨论后更新: 感谢所有有用的回复。最后,我对该主题进行了更多研究。 为什么java.lang.Number不实现Comparable的最简单解释源于可变性问题。 对于位的检讨,是抽象的超类型的,,,,,,,,和。在该列表中,并以没有实现。 深入研究,我发现在可变类型上实现不是一种好习惯,因为在比较期间或之后对象可能会更

  • 本文向大家介绍Java中的AbstractCollection类是什么?,包括了Java中的AbstractCollection类是什么?的使用技巧和注意事项,需要的朋友参考一下 AbstractCollection类提供Collection接口的实现。这样做是为了最大程度地减少此接口的实现工作。 对于不可修改的集合 扩展此类,并提供迭代器和size方法的实现。 用于可修改的收集 另外,重写类的方

  • 我现在想要一个数据结构,就像一个有索引的Deque。因此,它应该有O(1)在前面和后面添加和删除元素,以及O(1)基于索引访问元素。这并不难想象一个适合这种情况的设置。 ArrayDeque似乎是一个自然的选择。但是,ArrayDeque不实现List。由于底层数据结构是一个数组,是否有充分的理由不允许索引? 还有,更实用的是,有人知道有哪个图书馆在做我想做的事情吗。据我所知,Apache Com

  • 问题内容: 我正在将某些东西从Java移植到C#。在Java中,a 取决于其中的项目。在C#中,我总是从… 获取相同的哈希码。 为什么是这样? 对于我的某些对象,哈希码必须有所不同,因为其list属性中的对象使对象不相等。我希望哈希码对于对象的状态始终是唯一的,并且仅在对象相等时才等于另一个哈希码。我错了吗? 问题答案: 为了正常工作,散列码必须是不可变-一个对象的散列码必须 永远不会 改变。 如

  • 问题内容: 在我对Servlet的理解中,该Servlet将由Container实例化,其方法将被调用一次,并且Servlet将像单例一样存活,直到JVM关闭。 我不希望我的servlet被序列化,因为当应用服务器恢复或正常启动时,它将被重新构造。Servlet不应该包含特定于会话的成员,因此将其写入磁盘并重新实例化是没有意义的。有实际用途吗? 我担心的是,我在其中放置了一些不可序列化的字段,然后

  • 我没有受过CS方面的教育,但我已经专业地用Java编程近十年了,我从未见过任何人在生产系统中实现。这并不意味着它没有它的用途,或者和我一起工作的人一直在做正确的事情。 所以我的问题是,有哪些实现的用例不能通过语言中的另一个进程或语法更可靠地处理? 请提供具体的场景或您的经验,简单地重复一本Java教科书,或者Finalize的预期用途是不够的,因为这不是本问题的意图。