【发布时间】:2011-11-10 13:59:33
【问题描述】:
我有一个存储特定实例信息的对象。为此,我想使用Map,但因为键不是通过引用(它们不是,对吗?),而是作为getHashCode 方法提供的哈希值。为了更好地理解:
import collection.mutable._
import java.util.Random
object Foo {
var myMap = HashMap[AnyRef, Int]()
def doSomething(ar: AnyRef): Int = {
myMap.get(ar) match {
case Some(x) => x
case None => {
myMap += ar -> new Random().nextInt()
doSomething(ar)
}
}
}
}
object Main {
def main(args: Array[String]) {
case class ExampleClass(x: String);
val o1 = ExampleClass("test1")
val o2 = ExampleClass("test1")
println(o2 == o1) // true
println(o2 eq o1) // false
// I want the following two lines to yield different numbers
// and i do not have control over the classes, messing with their
// equals implementation is not possible.
println(Foo.doSomething(o1))
println(Foo.doSomething(o2))
}
}
如果我有具有相同哈希码的实例,则随机值的“缓存”将为两个实例返回相同的值,即使它们不一样。在这种情况下,哪种数据结构最适合?
澄清/修改
我知道这是如何正常工作的,基于hashCode 和equals 方法。但这正是我想要避免的。我更新了我的示例以使其更清楚。 :)
【问题讨论】:
标签: scala data-structures map