调用Scala的get
类的HashMap
方法时,使用哪种方法检查密钥是否存在(即地图中的某个键是否与等效到提供一个)?是==
还是其他人?
Scala API没有清楚地谈论它:
“可选择返回与键”
关联的值
答案 0 :(得分:4)
哈希映射首先检查哈希值,然后检查身份。所以“方法”是
key.hashCode == entry.hashCode && key == entry
(其中key
是您正在测试的项目,entry
是地图中已有的项目。特别是,scala.collection.immutable.HashMap
在get
方法中使用了这个表单(从Scala版本2.9开始)。
如果您想要更改身份的行为,则需要覆盖hashCode
和equals
,并且您也不能依赖已经在地图中的项目的重写行为;它是你测试的那个,调用相同的方法。 (但请注意,一般情况下,不会保证调用其equals方法,因此您不应该依赖此行为。)
答案 1 :(得分:0)
def contains(key: A): Boolean
测试此地图是否包含密钥的绑定。
和
def get(key: A): Option[B]
可选择返回与密钥关联的值。
(可选)表示:如果此类密钥的值不存在,则返回与Some
或None
中包含的给定密钥关联的值。