2015-06-26 386 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()); 
     } 
    } 
}