Peter P
Peter P

Reputation: 73

What is difference between null and empty list?

List<Map<String, Object>> pcList = null;
Map<String, Object> pcMap = new HashMap<String, Object>();
ComputerConfigurations tempPC = null;

if (historyList != null) {
    Iterator<ComputerConfigurations> iterator = historyList.iterator();
    while (iterator.hasNext()) {
        tempPC = (ComputerConfigurations) iterator.next();
        pcMap.put(tempPC.getEnvironment(), tempPC);
        pcList.add((Map<String, Object>) pcMap);
    }
}

I am getting null pointer exception on pcList.add((Map<String, Object>)pcMap); line. [Servlet Error]-: java.lang.NullPointerException . Any suggestion ?

Upvotes: 6

Views: 18089

Answers (4)

Able Varghese
Able Varghese

Reputation: 77

Here is an example based answer. In this example below pcList is just initialized and is pointed to null(java do this for you, if it's a static or class member) since there are no empty list or values assigned to it.

List<Map<String, Object>> pcList;

Right now, pcList is assigned a new empty ArrayList. It does not have any values yet, but all positions in the list are empty and this pcList with the datatype ArrayList is pointed towards this new empty ArrayList.

List<Map<String, Object>> pcList = new ArrayList<>();

If an Object reference has been declared but not instantiated, its value is null.

Upvotes: 0

ajb
ajb

Reputation: 31689

In Java, collections won't magically spring into existence just by adding something to them. You have to initialize pcList by creating an empty collection first:

List<Map<String, Object>> pcList = new ArrayList<>();

An empty collection isn't the same as null. An empty collection is actually a collection, but there aren't any elements in it yet. null means no collection exists at all.

Note that an object can't be of type List, because that's an interface; therefore, you have to tell Java what kind of List you really want (such as an ArrayList, as I've shown above, or a LinkedList, or some other class that implements List).

Upvotes: 9

Steve Chaloner
Steve Chaloner

Reputation: 8202

You're not initialising pcList at any point. Try this:

    final List<Map<String, Object>> pcList = new LinkedList<>();
    Map<String, Object> pcMap = new HashMap<String, Object>();
    ComputerConfigurations tempPC = null;

    if (historyList != null) {
        Iterator<ComputerConfigurations> iterator = historyList.iterator();
        while (iterator.hasNext()) {
            tempPC = (ComputerConfigurations) iterator.next();
            pcMap.put(tempPC.getEnvironment(), tempPC);
            pcList.add((Map<String, Object>) pcMap);
        }
    }

Upvotes: 0

LYan
LYan

Reputation: 1

    List<Map<String, Object>> pcList = new ArrayList<Map<String, Object>>();
    Map<String, Object> pcMap = new HashMap<String, Object>();
    ComputerConfigurations tempPC = null;

    if (historyList != null) {
        Iterator<ComputerConfigurations> iterator = historyList.iterator();
        while (iterator.hasNext()) {
            tempPC = (ComputerConfigurations) iterator.next();
            pcMap.put(tempPC.getEnvironment(), tempPC);
            pcList.add((Map<String, Object>) pcMap);
        }
    }

Upvotes: -1

Related Questions