[英]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.