使用get方法获取带有get或contains的Hashmap的值

时间:2015-08-31 12:24:08

标签: scala scala-collections

哪一种更好的方法从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

3 个答案:

答案 0 :(得分:3)

正如dk14所说,如果你不确定地图是否包含密钥,你最好使用返回get的{​​{1}}。

如果Option中没有该密钥,您可以使用getOrElse设置默认值。

如果您没有要设置的默认值,如果Map包含for而不是Option

,则可以使用Some理解
None

答案 1 :(得分:1)

这对某些关键字更好:

 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)

答案 2 :(得分:1)

表演:

有一个测试代码:http://pastebin.com/TbM82S7H

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

(cpu:i5 4590K)

这两个电话中没有一个在性能上更好......