使用Scala的HashMap时如何定义键等价?

时间:2012-05-29 19:39:15

标签: scala

调用Scala的get类的HashMap方法时,使用哪种方法检查密钥是否存在(即地图中的某个键是否与等效到提供一个)?是==还是其他人?

Scala API没有清楚地谈论它:

  

“可选择返回与键”

关联的值

2 个答案:

答案 0 :(得分:4)

哈希映射首先检查哈希值,然后检查身份。所以“方法”是

key.hashCode == entry.hashCode && key == entry

(其中key是您正在测试的项目,entry是地图中已有的项目。特别是,scala.collection.immutable.HashMapget方法中使用了这个表单(从Scala版本2.9开始)。

如果您想要更改身份的行为,则需要覆盖hashCodeequals,并且您也不能依赖已经在地图中的项目的重写行为;它是你测试的那个,调用相同的方法。 (但请注意,一般情况下,不会保证调用其equals方法,因此您不应该依赖此行为。)

答案 1 :(得分:0)

  

def contains(key: A): Boolean

     

测试此地图是否包含密钥的绑定。

  

def get(key: A): Option[B]

     

可选择返回与密钥关联的值。

(可选)表示:如果此类密钥的值不存在,则返回与SomeNone中包含的给定密钥关联的值。