使用 get 或 contains 使用 apply 方法从 Hashmap 获取值

Getting value from Hashmap with get or contains with apply method

从 hashmap 中获取值的更好方法是什么?

第一个选项:

val hm = HashMap(...)
if(hm.contains(keyWhichIsDefinitelyInTheKeys)){
  hm(keyWhichIsDefinitelyInTheKeys)  ... //do stuff
} else {
 ... //do stuff
}

第二个选项:

hm.get(keyWhichIsDefinitelyInTheKeys) match {
    case Some => ...
    case None => ...
} // do stuff

这对某些键更好:

 hm.getOrElse(key, defaultValue)

 //or

 hm.getOrElse(key, sys.error(s"unexpected key: $key"))

 //or more generally

 hm.get(key).map(v => doStuff(v)).getOrElse(doOtherStuff)

你不能 100% 确定 Map 包含密钥,除了一些类型级别的保护(编译时检查);但是,如果你这样做了,那么 if 无论如何也帮不了你,所以只需:

 hm(keyWhichIsDefinitelyInTheKeys)

正如dk14所说,如果你不确定Map是否包含key,你最好使用get which return an Option.

如果密钥不在 Map 中,您可以使用 getOrElse 设置默认值。

如果您没有要设置的默认值,如果 Option 包含 Some 而不是 None[=19=,则可以使用 for 理解]

scala> val hm = Map( 1 -> "Hello")
hm: scala.collection.immutable.Map[Int,String] = Map(1 -> Hello)

scala> for (i <- hm.get(2) ) { println(i) }

scala> for (i <- hm.get(1) ) { println(i) }
Hello

表现中:

有测试码:http://pastebin.com/TbM82S7H

这是它的输出:http://pastebin.com/7An1DZw5

(cpu: i5 4590K)

None两次调用性能更好...