簡體   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