Поле keySet в HashMap пусто - PullRequest
       38

Поле keySet в HashMap пусто

9 голосов
/ 16 февраля 2010

Я пытаюсь перебрать HashMap методом keySet(), как показано ниже:

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

Я использую множество циклов for-each в HashMaps в других частях моего кода, но это странное поведение: его размер равен 7 (что нормально), но keySet, entrySet и values null (согласно отладчику 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 Ответ

18 голосов
/ 16 февраля 2010

Что вы подразумеваете под keySet, entrySet и values? Если вы имеете в виду внутренние поля HashMap, то вам не следует смотреть на них и не нужно заботиться о них. Они используются для кеширования.

Например, в виртуальной машине Java 6, которую я использую keySet(), реализовано так:

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

Так что факт, что keySet есть null, не имеет значения. keySet() (метод) никогда не вернет null.

То же самое верно для entrySet() и values().

...