繁体   English   中英

Java HashMap空值或键

[英]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方法getOrDefaultmergecomputeIfAbsentnull值都不友好:通常它们假定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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM