views:

296

answers:

2

Hi,

I am trying to loop over an HashMap with the keySet 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 Eclipse debug) !

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

Any ideas are welcomed, maybe something very simple I do not see ...

Mathieu

+6  A: 

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

Joachim Sauer
It looks like the Eclipse debugger does display the desired information in the 'table' field.
Personman
A: 

As Joachim points out, it's irrelevant to look at internal fields of HashMaps with the debugger. The problem wasn't here, and the loop over the keySet works now.

Thanks for the explanation anyway ;)

Mathieu

Mathieu L