2015-06-26 111 views
0

有可能我可以直接將值設置爲空值HashMapJava HashMap空值或密鑰

我想要的是檢查HashMap中的一個密鑰的值是否爲null然後我要填寫它。

+1

是的,那是可能的。 –

+0

地圖鍵不是地圖值。雖然允許,但通常不會「放置空值」(因爲它通常不會在地圖上開始!),並且每個地圖最多隻有一個「空鍵」(它是相同的)。 – user2864740

+0

@tuturyokgaming你只是想看看如何找到具有空值的鍵,然後在那裏放置一個值?是的,這樣做很容易。請讓我知道,我會發布代碼。 – Nirmal

回答

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 
} 
+0

那麼我該如何填充空值或鍵? – tuturyokgaming

+0

@tuturyokgaming'map.put(key,value)' – Eran

0

除了@Eran答案我應該指出,在Mapnull值氣餒。首先,它不受每個Map實現的支持。例如,ConcurrentHashMap不支持null值,因此如果稍後此Map將在多個線程中共享,並且您決定轉移到ConcurrentHashMap,則會發現在不刪除空值的情況下無法執行此操作。其次,大多數新的Java-8 API方法getOrDefaultmerge,computeIfAbsent不符合null值:通常他們認爲null的值與沒有值相同。最後處理null值有點慢,因爲你需要檢查兩次相同的密鑰(第一次通過containsKey,第二次通過get)。

因此,一般來說,如果可能的話,你應該避免在地圖中的空值。有時候可以引入一個特殊的常量來表示沒有價值。這取決於特定的任務。

+0

是的,我現在需要爲鍵添加空值。因爲我正在閱讀一個文本文件,並將一些行添加到arraylist和arraylist將被放到該值,但發生的是我正在閱讀該行並將其分解爲CSV。所以我在做什麼,我先用逗號讀取所有行,然後將它存儲到HashMap的關鍵字。其次我將它存儲到arraylist並需要將它放到具有空值的鍵上。我正在使用JDK-6 – tuturyokgaming

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()); 
     } 
    } 
}