Scala集合元素唯一性:用户定义类的比较要实现什么?

Scala集合元素唯一性:用户定义类的比较要实现什么?,scala,set,compare,unique,Scala,Set,Compare,Unique,我试图在中找到此信息,但它似乎不在那里 在Java中,这取决于所使用的Set实现AFAIK。在某些情况下,要实现的方法是等于,在哈希集的情况下,使用哈希方法进行比较 scala.collections.mutable.Set的实际实现细节似乎没有具体说明,因为实现可能会有所不同(这很好,我喜欢我的代码是泛型的),但我想知道如何确保与这样一个泛型集合进行特定的比较 例如,在这种情况下,有一个隐式的排序[A]来确保顺序。在Set的情况下是否有类似的情况?scala和java都要求您以一致的方式实现e

我试图在中找到此信息,但它似乎不在那里

在Java中,这取决于所使用的
Set
实现AFAIK。在某些情况下,要实现的方法是
等于
,在
哈希集
的情况下,使用哈希方法进行比较

scala.collections.mutable.Set
的实际实现细节似乎没有具体说明,因为实现可能会有所不同(这很好,我喜欢我的代码是泛型的),但我想知道如何确保与这样一个泛型集合进行特定的比较


例如,在这种情况下,有一个隐式的
排序[A]
来确保顺序。在
Set
的情况下是否有类似的情况?

scala和java都要求您以一致的方式实现equals和hashCode。如果在某些情况下,它只与一个起作用,那就是巧合。您必须同时具有这两个属性,以便在类为X的情况下,对于每个X,
x1.equals(x2)=(x1.hashCode()==x2.hashCode())


Scala case类有编译器为您实现的equals和hashCode方法。

Scala和java都要求您以一致的方式实现equals和hashCode。如果在某些情况下,它只与一个起作用,那就是巧合。您必须同时具有这两个属性,以便在类为X的情况下,对于每个X,
x1.equals(x2)=(x1.hashCode()==x2.hashCode())


Scala case类有编译器为您实现的equals和hashCode方法。

另外,有没有更好的方法来使用文档,这样我就不必问这些问题了?我遗漏了什么吗?可能的副本也是,有没有更好的方法使用文档,这样我就不需要问这些问题了?我遗漏了什么吗?我看到了可能的重复,关于
Set
和其他特定类的文档没有说明什么,因为这些方法应该为每个类定义,是吗?@Trylks应该在每个类上定义它们,如果你想比较它们是否相等,或者将它们插入到映射或集合中。从技术上讲,它们已经定义好了,编译器不会产生任何错误。就我所见,不定义它们是不可能的。它们是实现的,但实现往往没有用处。它只是equals(同一个实例)的对象标识,对于hashCode,它使用对象的内存地址。我明白了,关于
Set
和其他特定类的文档没有说明什么,因为这些方法应该为每个类定义,是吗?@Trylks应该在每个类上定义它们,如果你想比较它们是否相等,或者将它们插入到映射或集合中。从技术上讲,它们已经定义好了,编译器不会产生任何错误。就我所见,不定义它们是不可能的。它们是实现的,但实现往往没有用处。它只是equals(相同实例)的对象标识,对于hashCode,它使用对象的内存地址。