HashMap中的keySet字段为null

时间:2010-02-16 11:28:45

标签: java collections map hashmap

我正尝试使用HashMap方法循环keySet(),如下所示:

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

我在代码的其他部分对HashMaps使用了很多for-each循环,但是这个循环是一个奇怪的行为:它的大小是7(这是正常的)但是keySetentrySetvaluesnull(根据Eclipse调试器)!

“bundle”变量被实例化并填充如下(没有原始...):

Map <String, String> privVar;
Constructor(){
    privVar = new HashMap<String, String>();
}
public void add(String key, String value) {
    this.privVar.put(key, value);
}

1 个答案:

答案 0 :(得分:18)

keySetentrySetvalues是什么意思?如果你的意思是HashMap的内部字段,那么你不应该看它们而不必关心它们。它们用于缓存。

例如,在我使用keySet()的Java 6 VM中实现如下:

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

因此keySetnull这一事实无关紧要。 keySet()(方法)永远不会返回null

entrySet()values()也是如此。