マップは不変ですが、マップに使用するキーは変更可能であるか、不正確hashcode
で、equals
非決定論的な結果を返す実装を持っている可能性はありますか? 使用するタイプは何ですか?
REPL の誇張された例:
scala> import scala.util.Random
import scala.util.Random
scala> class BadKey(val value: Int) {
| override def hashCode = Random.nextInt(Int.MaxValue)
|
| override def equals(x: Any) = Random.nextBoolean
| }
defined class BadKey
scala> val randMap = Map(new BadKey(1) -> 1, new BadKey(2) -> 2)
randMap: scala.collection.immutable.Map[BadKey,Int] = Map(BadKey@26132448 -> 1, BadKey@41e1cd27 -> 2)
scala> randMap.get(new BadKey(1))
res6: Option[Int] = Some(1)
scala> randMap.get(new BadKey(1))
res7: Option[Int] = Some(2)
scala> randMap.get(new BadKey(1))
res8: Option[Int] = Some(1)
scala> randMap.get(new BadKey(1))
res9: Option[Int] = Some(1)
scala> randMap.get(new BadKey(1))
res10: Option[Int] = Some(1)
scala> randMap.get(new BadKey(1))
res11: Option[Int] = None