参见英文答案 >
Is using java Map.containsKey() redundant when using map.get()6个
我想知道,在尝试访问它之前检查特定密钥是否有意义.例:
我想知道,在尝试访问它之前检查特定密钥是否有意义.例:
Map myMap ....
if myMap.containsKey(key) {
Object value = myMap.get(key);
.....
}
不使用containsKey的示例:
Object value = myMap.get(key);
if (value != null) {
......
}
编辑:澄清空键和值.假设该映射不允许空键和空值,因此这两个示例是相同的.
解决方法
是 – 键可以具有空值:
Map myMap = ...;
myMap.put("foo",null);
if (myMap.containsKey("foo")) {
Object value = myMap.get(key); // value is null
}
Object value = myMap.get("foo");
if (value != null) {
// you won't get here
}
您可以争辩(并且我同意),当他们第一次创建Java的集合API时,不区分空值和不存在的条目是一个非常糟糕的设计决策.
(有些地图 – 至少是Hashtable和ConcurrentHashMap – 不允许空值,这使得containsKey不那么重要,但它仍然比m.get(k)== null提高了可读性.)

