为什么ArrayDeque不重写equals()和hashCode()?

Pou*_*ria 4 java collections equals hashcode

编辑:现在只考虑ArrayDeque.(我原本以为LinkedList也不会覆盖这两种方法.)

集合类型ArrayDeque只使用它从Object继承的hashCodeequals方法实现.

为什么不用正确的实现覆盖这些方法(即基于包含的元素的哈希和相等测试)?

Jon*_*eet 8

LinkedList扩展AbstractSequentialList哪个扩展AbstractList,覆盖equalshashCode- 所以实现不是从继承Object.

ArrayDeque另一方面,就我所见,实际上并没有继承任何其他实现.它的直接超类(AbstractCollection)不会覆盖它们.这感觉就像一个例外,而不是规则 - 我相信Java中的大多数集合实现都"做正确的事情".

我不知道ArrayDeque选择不实现相等的理由,但如果你想比较两个deques,你可以很容易地将它们转换成列表或数组,并以这种方式进行.

  • 实际上恰恰相反,[Deque](https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html) 明确指出“Deque 实现通常不定义基于元素的版本equals 和 hashCode 方法,而是从类 Object 继承基于身份的版本”。 (2认同)