我是否可以直接将值放到键中,其值为HashMap
?
我想要检查HashMap
中一个键的值是否为null
,然后我会填写它。
答案 0 :(得分:0)
如果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
}
答案 1 :(得分:0)
除@Eran答案外,我还应注意,不建议在null
中使用Map
值。首先,每个Map实现都不支持它。例如,ConcurrentHashMap
不支持null
值,因此如果以后这个Map
将在多个线程中共享,并且您决定转移到ConcurrentHashMap
,您会发现不能这样做而不会删除空值。其次,大多数新的Java-8 API方法getOrDefault
,merge
,computeIfAbsent
对null
值的行为不友好:通常他们假设null
值与缺少值相同。最后处理null
值稍慢,因为您需要两次检查相同的密钥(首先通过containsKey
,第二个通过get
)。
因此,一般来说,如果可能的话,你应该避免在地图中使用空值。有时可能会引入一个特殊的常数来表示缺少该值。这取决于特定的任务。
答案 2 :(得分:0)
这是最简单的(可以进一步改进/代码审查)完整的程序。它将找到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());
}
}
}