我试图在Scala documentation中找到此信息,但看起来它不存在。
对于Java,这取决于所使用的Set
实现AFAIK。在某些情况下,实现的方法是equals
,在HashSet
的情况下,使用哈希方法进行比较。
scala.collections.mutable.Set
的实际实现细节似乎未指定,因为实现可能会有所不同(而且很好,我喜欢我的代码是通用的),但我想知道如何确保具体的比较完成这样的通用集合。
例如,在SortedSet
的情况下,有一个隐式Ordering[A]
来确保订单。在Set
答案 0 :(得分:4)
scala和java都要求您以一致的方式实现equals和hashCode。如果它在某些情况下仅使用一个,那就巧合了。你必须同时拥有这两个,以便你的班级为X,每个X,x1.equals(x2) == (x1.hashCode() == x2.hashCode())
。
Scala案例类具有编译器为您实现的equals和hashCode方法。