[英]Java HashMap null values or keys
是否可以将值直接放入具有HashMap
空值的键中?
我想要的是检查HashMap
的一个键的值是否为null
然后将其填充。
如果map.get(key)
返回null,则说明Map中不存在该键或该键具有空值。
区分两者:
if (map.containsKey(key)) {
if (map.get(key) == null) {
// key is present and has null value
}
} else {
// key is not present in the Map
}
除了@Eran答案外,我还应该注意不要在Map
中使用null
值。 首先,并非每个Map实现都支持它。 例如, ConcurrentHashMap
不支持null
值,因此,如果稍后此Map
将在多个线程之间共享,并且您决定移至ConcurrentHashMap
您将发现您必须这样做才能摆脱null。 其次,大多数新的Java-8 API方法getOrDefault
, merge
, computeIfAbsent
对null
值都不友好:通常它们假定null
值与不存在null
值相同。 最后,处理null
值会稍微慢一些,因为您需要两次检查相同的键(第一个通过containsKey
,第二个通过get
)。
因此,通常,如果可能,应避免在地图中使用null值。 有时可能会引入一个特殊的常量,该常量指示缺少值。 这取决于特定的任务。
这是最简单(可以改进/代码可以进一步检查)的完整程序。 它将找到key
,如果相应的值为null
,它将用yourNewValue替换该null。
import java.util.HashMap;
import java.util.Map;
public class SimpleMapKeyValue {
public static void main(final String[] args) throws Exception {
final Map<String, Integer> map = new HashMap<>();
map.put("A", 5);
map.put("B", 10);
map.put("D", null);
map.put("E", 23);
int yourNewValue = 100;
for(Map.Entry<String, Integer> entry : map.entrySet()){
if (entry.getValue() == null) {
map.put(entry.getKey(),yourNewValue);
}
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.