参见英文答案 >
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提高了可读性.)