75

如何将空值传递给 HashMap?
以下代码片段适用于填写的选项:

HashMap<String, String> options = new HashMap<String, String>();  
options.put("name", "value");
Person person = sample.searchPerson(options);  
System.out.println(Person.getResult().get(o).get(Id));    

所以问题是必须在选项和/或方法中输入什么来传递空值?
我尝试了以下代码但没有成功:

options.put(null, null);  
Person person = sample.searchPerson(null);    

options.put(" ", " ");  
Person person = sample.searchPerson(null);    

options.put("name", " ");  
Person person = sample.searchPerson(null);  

options.put();  
Person person = sample.searchPerson();    
4

6 回答 6

134

HashMap 支持null键和值

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

...并允许空值和空键

所以你的问题可能不是地图本身。

于 2013-02-26T14:24:56.327 回答
12

您可以注意以下可能性:

1. 在地图中输入的值可以是null

但是,对于多个null键和值,它只会采用一次空键值对。

Map<String, String> codes = new HashMap<String, String>();

codes.put(null, null);
codes.put(null,null);
codes.put("C1", "Acathan");

for(String key:codes.keySet()){
    System.out.println(key);
    System.out.println(codes.get(key));
}

输出将是:

null //key  of the 1st entry
null //value of 1st entry
C1
Acathan

2. 你的代码只会执行null一次

options.put(null, null);  
Person person = sample.searchPerson(null);   

searchPerson如果您想要多个值,这取决于您的方法的实现null,您可以相应地实现

Map<String, String> codes = new HashMap<String, String>();

    codes.put(null, null);
    codes.put("X1",null);
    codes.put("C1", "Acathan");
    codes.put("S1",null);


    for(String key:codes.keySet()){
        System.out.println(key);
        System.out.println(codes.get(key));
    }

输出:

null
null

X1
null
S1
null
C1
Acathan
于 2016-08-29T14:14:04.117 回答
4

您似乎正在尝试使用 Map 参数调用方法。所以,用一个空的人名调用正确的方法应该是

HashMap<String, String> options = new HashMap<String, String>();
options.put("name", null);  
Person person = sample.searchPerson(options);

或者你可以这样做

HashMap<String, String> options = new HashMap<String, String>();
Person person = sample.searchPerson(options);

使用

Person person = sample.searchPerson(null);

可以给你一个空指针异常。这一切都取决于 searchPerson() 方法的实现。

于 2014-11-28T06:09:13.547 回答
0

避免null在 Map 中有值是一种很好的编程习惯。

如果您有一个带有null值的条目,则无法判断该条目是否存在于映射中或是否具有null与之关联的值。

您可以为这种情况定义一个常量(示例:)String NOT_VALID = "#NA",或者您可以让另一个集合存储具有null值的键。

请检查此链接以获取更多详细信息。

于 2017-06-28T07:24:49.903 回答
-2

根据您的第一个代码片段似乎还可以,但是由于编程错误,我也遇到了类似的行为。您在看跌期权之前检查过“选项”变量不为空吗?

我正在使用 Struts2 (2.3.3) webapp 并使用 HashMap 来显示结果。何时执行(在由 Action 类初始化的类中):

if(value != null) pdfMap.put("date",value.toString());
else pdfMap.put("date","");

得到这个错误:

Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
File:   aoc/psisclient/samples/PDFValidation.java
Line number:    155
Stacktraces

java.lang.NullPointerException
    aoc.psisclient.samples.PDFValidation.getRevisionsDetail(PDFValidation.java:155)
    aoc.action.signature.PDFUpload.execute(PDFUpload.java:66)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    ...

似乎 NullPointerException 指向 put 方法(第 155 行),但问题是 de Map 之前尚未初始化。它编译正常,因为变量不在设置值的方法中。

于 2014-02-14T12:18:40.020 回答
-6

你可能可以这样做:

String k = null;
String v = null;
options.put(k,v);
于 2014-05-13T17:54:33.243 回答