簡體   English   中英

比較Scala中哈希映射的關鍵

[英]Comparing key of hash map in Scala

我需要閱讀一些Scala代碼(從幾個小時前開始),我還需要確保Scala中的哈希映射如何比較密鑰。 在閱讀了一些帖子后,我知道==是用於值比較,但是不清楚哈希映射(例如scala.collection.immutable.Map )鍵是使用值比較( == )還是參考比較來比較的?

HashMap使用==和散列方法##來比較密鑰。 它不能使用引用因為那樣像Map(List(1) -> 'a, List(1) -> 'b)這樣的東西會包含兩個條目,這是錯誤的。

查看源代碼(在網站上):

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

      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM