Scala 集合元素的唯一性:比较用户定义的 类 要实现什么?
Scala set element uniqueness: What to implement for comparison of user defined classes?
我正试图在 Scala documentation 中找到此信息,但它似乎不存在。
在 Java 的情况下,这取决于所使用的 Set
实现,AFAIK。在某些情况下,实现的方法是 equals
,在 HashSet
的情况下,比较是使用散列方法完成的。
scala.collections.mutable.Set
的实际实现细节似乎未指定,因为实现可能会有所不同(这很好,我喜欢我的代码是通用的),但我想知道如何确保完成特定比较有这样一个通用的集合。
比如在SortedSet
的情况下,有一个隐含的Ordering[A]
来保证顺序。在Set
的情况下是否有任何类似的东西?
scala 和 java 都要求您以一致的方式实现 equals 和 hashCode。如果它在某些情况下只与一个一起工作,那是巧合。你必须同时拥有两者,这样你的 class 就是 X,对于每个 X,x1.equals(x2) == (x1.hashCode() == x2.hashCode())
.
Scala 案例 classes 具有编译器为您实现的 equals 和 hashCode 方法。
我正试图在 Scala documentation 中找到此信息,但它似乎不存在。
在 Java 的情况下,这取决于所使用的 Set
实现,AFAIK。在某些情况下,实现的方法是 equals
,在 HashSet
的情况下,比较是使用散列方法完成的。
scala.collections.mutable.Set
的实际实现细节似乎未指定,因为实现可能会有所不同(这很好,我喜欢我的代码是通用的),但我想知道如何确保完成特定比较有这样一个通用的集合。
比如在SortedSet
的情况下,有一个隐含的Ordering[A]
来保证顺序。在Set
的情况下是否有任何类似的东西?
scala 和 java 都要求您以一致的方式实现 equals 和 hashCode。如果它在某些情况下只与一个一起工作,那是巧合。你必须同时拥有两者,这样你的 class 就是 X,对于每个 X,x1.equals(x2) == (x1.hashCode() == x2.hashCode())
.
Scala 案例 classes 具有编译器为您实现的 equals 和 hashCode 方法。