1

我偶然发现了TObjectDoubleHashMaptrove 的问题。2.0.2 版不会覆盖该hashCode方法。

trove (3.0.0) 的更新版本包括hashCode.

请注意,该equals方法在两个版本中都被覆盖。

为什么hashCode版本 2 中没有覆盖该方法?hashCode也许覆盖/的合同equals是在最初编写 trove 地图之后引入的?还是只是违反合同和后来修复的错误?如果它是一个错误而不是一个功能,我会感到非常惊讶,因为主要处理散列的类为什么没有覆盖hashCodeequals

4

1 回答 1

1

hashCode也许覆盖/的合同equals是在最初编写 trove 地图之后引入的?

不,那是很久以前的事了。我相信至少早在 1.1,但我找不到早于1.3的文档。

还是只是违反合同和错误?

是的。这是对合同的违反。请注意,java.util.Map它有自己的额外平等/哈希码合约java.lang.Object,它被IdentityHashMap和其他一些人故意违反。

javadoc

public boolean equals(Object o)

比较指定对象与此映射是否相等。true如果给定对象也是一个映射并且两个Maps 表示相同的映射,则返回。更正式地说,两个映射 t1 和 t2 表示相同的映射 if t1.entrySet().equals(t2.entrySet())这确保了 equals 方法在Map接口的不同实现中正常工作。

于 2012-02-15T12:25:38.070 回答