java - Map.containsKey() 有用吗?

标签 java map

<分区>

我想知道,在尝试访问特定 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 - HashtableConcurrentHashMap ,至少 - 不允许 null 值,这使得 containsKey 在那里不那么重要,但它仍然是一个比 m.get(k) == null 更好的可读性改进。)

关于java - Map.containsKey() 有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398334/

相关文章:

java - 从简单对象访问 CDI?

java - 代理模式和持有者模式

java - 每次更改时自动更新 jTextFields 的总和 (Java)

c++ - 使用映射迭代器编译错误

grails - 如何间接引用 grails GSP 模型变量,例如通过 .get(...)

java - 程序采用非空子级并对其进行操作

java - 找不到更新日志 changelog.groovy

list - 将 Scala 列表转换为以索引为键的映射

list - 在 Clojure 中访问列表中的 map

c++ - 在字典中查找单词模式,高性能