Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

keySet field in HashMap is null

I am trying to loop over a HashMap with the keySet() method as below:

for (String key : bundle.keySet()) {
    String value = bundle.get(key);
    ...
}

I use a lot of for-each loops on HashMaps in other parts of my code, but this one as a weird behavior: its size is 7 (what's normal) but keySet, entrySet and values are null (according to the Eclipse debugger)!

The "bundle" variable is instantiated and populated as follows (nothing original...):

Map <String, String> privVar;
Constructor(){
    privVar = new HashMap<String, String>();
}
public void add(String key, String value) {
    this.privVar.put(key, value);
}
like image 523
Mathieu L Avatar asked Feb 16 '10 11:02

Mathieu L


1 Answers

What do you mean by keySet, entrySet and values? If you mean the internal fields of HashMap, then you should not look at them and need not care about them. They are used for caching.

For example in the Java 6 VM that I use keySet() is implemented like this:

public Set<K> keySet() {
    Set<K> ks = keySet;
    return (ks != null ? ks : (keySet = new KeySet()));
}

So the fact that keySet is null is irrelevant. keySet() (the method) will never return null.

The same is true for entrySet() and values().

like image 86
Joachim Sauer Avatar answered Oct 21 '22 22:10

Joachim Sauer