我想知道,在尝试访问特定 key 之前检查它是否有意义。示例:
Map myMap ....
if myMap.containsKey(key) {
Object value = myMap.get(key);
.....
}
不使用 containsKey
的例子:
Object value = myMap.get(key);
if (value != null) {
......
}
编辑:澄清空键和空值。比方说,该映射不允许空键和空值,因此这两个示例是相同的。
是的 - 键可以有 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 时,不区分 null
值和不存在的条目是一个非常糟糕的设计决定。
(一些 map - Hashtable
和 ConcurrentHashMap
,至少 - 不允许 null
值,这使得 containsKey
在那里不那么重要,但它仍然是一个比 m.get(k) == null
更好的可读性改进。)