Я использую Scala 2.11.
У меня есть класс дел Размер , и я создал 3 экземпляра этого класса. Когда я положил их в HashSet , я неожиданно обнаружил, что только 1 был добавлен правильно. Тогда я попытался отладить и обнаружил, что у них был тот же самый хэш-код.
Я новичок в Scala, но у меня большой опыт работы с Java. Мне интересно, почему все они имеют одинаковый hashCode, даже если у них разные поля, и какова реализация метода hashCode по умолчанию в классе case Scala? И как работает HashSet / HashMap в Scala?
Вот мой пример кода.
object Echo {
def main( args:Array[String] ):Unit = {
var d1 = new Dimension
d1.name = "d1"
d1.dimensionId = "1"
println("d1:" + d1.hashCode()) // d1, d2, d3 have the same hashCode
var d2 = new Dimension
d2.name = "d2"
d2.dimensionId = "2"
println("d2:" + d2.hashCode())
var d3 = new Dimension
d3.name = "d3"
d3.dimensionId = "3"
println("d3:" + d3.hashCode())
var l = List(d1, d2, d3)
val categories = mutable.HashSet.empty[Dimension]
l.foreach(md => {
categories += md
})
println(categories.size) // size is 1
}
}
case class Dimension() {
var dimensionId: String = _
var name: String = _
}