誰かが次のことを理解するのを手伝ってくれますか? 要素のツリーマップを作成すると、scala は、compare メソッドも要素の等価性を決定すると判断したように見えるため、「compare」メソッドに従って同じ要素を削除します。オーバーライドしていない場合、オブジェクトの等価性に従って等価性を定義する必要があるため、これは期待していませんか?
import scala.collection.mutable._
class A(val num: Int) extends Ordered[A] {
def compare (that: A) = {
this.num - that.num
}
override def toString() = {
num+""
}
}
object A {
def main(args: Array[String]) = {
val mySet = new TreeSet[A]()
mySet += new A(3)
mySet += new A(2)
mySet += new A(1)
mySet += new A(3)
mySet += new A(2)
mySet += new A(1)
mySet.foreach(println)
}
}
与える
1
2
3
期待されていない(私が)
1
1
2
2
3
3