Java HashMap空值或键

时间:2015-06-26 03:36:13

标签: java hashmap

我是否可以直接将值放到键中,其值为HashMap

我想要检查HashMap中一个键的值是否为null,然后我会填写它。

3 个答案:

答案 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方法getOrDefaultmergecomputeIfAbsentnull值的行为不友好:通常他们假设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());
        }
    }
}