我需要阅读一些Scala代码(从几个小时前开始),我还需要确保Scala中的哈希映射如何比较密钥。阅读一些帖子之后,我知道==
用于值比较,但不清楚哈希映射(例如scala.collection.immutable.Map
)键是使用值比较(==
)还是参考进行比较的比较
答案 0 :(得分:2)
HashMap
使用==
和散列方法##
来比较密钥。它无法使用引用,因为像Map(List(1) -> 'a, List(1) -> 'b)
这样的东西会包含两个条目,这是错误的。
答案 1 :(得分:1)
请参阅源代码(位于网站上):
http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.HashMap
我编写了简单的测试用例(eclipse上的scala 2.9.1)。您可以在eclipse上调试它 - 源代码行与api站点相同。
class EqualsTest {
case class Key(private val value: Int) {
override def hashCode() = value
override def equals(other: Any) = other match {
case that: Key => that.value == value
case _ => false
}
}
@Test
def test() {
val map = Map(Key(1)->1,Key(2)->3,Key(4)->5,Key(5)->2,Key(9)->9)
val key = Key(1)
val value = map.get(key) //add breakpoint here
}
}