我想知道,在尝试访问特定密钥之前检查它是否有意义。例子:
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
}
你可以争辩(我同意)null
当他们第一次制作 Java 的集合 API 时,不区分值和不存在的条目是一个非常糟糕的设计决策。
(一些地图 -Hashtable
至少ConcurrentHashMap
- 不允许使用null
值,这在containsKey
那里变得不那么重要,但它仍然是一个很好的可读性改进m.get(k) == null
。)
如果您的地图允许null
值,只是get(key)
您无法区分具有 value = 的null
键/值对和“不存在匹配的键/值对”。
是的,它很有用 - 特别是如果您的 Map 允许null
值...
@Test
public void testContainsKey() {
Map<String, Object> strObjMap = new HashMap<String, Object>();
strObjMap.put("null", null);
assertTrue(strObjMap.containsKey("null"));
assertNull(strObjMap.get("null"));
}