比较Scala中哈希映射的关键

时间:2012-03-15 07:26:29

标签: scala

我需要阅读一些Scala代码(从几个小时前开始),我还需要确保Scala中的哈希映射如何比较密钥。阅读一些帖子之后,我知道==用于值比较,但不清楚哈希映射(例如scala.collection.immutable.Map)键是使用值比较(==)还是参考进行比较的比较

2 个答案:

答案 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

      }
    }