HashMaps and Null values?

前端 未结 4 1652
闹比i
闹比i 2021-02-11 11:50

How do you pass in null values into a HashMap?
The following code snippet works with options filled in:

HashMap options = new HashMap         


        
相关标签:
4条回答
  • 2021-02-11 12:19

    Acording to your first code snipet seems ok, but I've got similar behavior caused by bad programing. Have you checked the "options" variable is not null before the put call?

    I'm using Struts2 (2.3.3) webapp and use a HashMap for displaying results. When is executed (in a class initialized by an Action class) :

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

    Got this error:

    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)
        ...
    

    Seems the NullPointerException points to the put method (Line number 155), but the problem was that de Map hasn't been initialized before. It compiled ok since the variable is out of the method that set the value.

    0 讨论(0)
  • 2021-02-11 12:25

    You can keep note of below possibilities:

    1. Values entered in a map can be null.

    However with multiple null keys and values it will only take a null key value pair once.

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

    output will be :

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

    2. your code will execute null only once

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

    It depends on the implementation of your searchPerson method if you want multiple values to be null, you can implement accordingly

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

    output:

    null
    null
    
    X1
    null
    S1
    null
    C1
    Acathan
    
    0 讨论(0)
  • 2021-02-11 12:26

    It seems that you are trying to call a method with a Map parameter. So, to call with an empty person name the right approach should be

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

    Or you can do it like this

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

    Using

    Person person = sample.searchPerson(null);
    

    Could get you a null pointer exception. It all depends on the implementation of searchPerson() method.

    0 讨论(0)
  • 2021-02-11 12:39

    HashMap supports both null keys and values

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

    ... and permits null values and the null key

    So your problem is probably not the map itself.

    0 讨论(0)
提交回复
热议问题