哪一种更好的方法从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
答案 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)
这两个电话中没有一个在性能上更好......