KeySet, EntrySet и значения HashMap равны нулю, а таблица не пуста

Я читаю data.ser файл, чтобы заполнить некоторые HashMapс сохраненными данными.

Хотя Map имеет значения, которые я должен иметь, KeySet, EntrySetи все значения равны нулю. например, Hashmap "Сотрудники" выглядят так, когда я проверяю их в режиме отладки:

hashmap, как показано с параметром проверки отладок

Может кто-нибудь помочь мне понять, что с ним не так? Как эта ситуация вообще возможна?

Пример для возвращенного нулевого значения, хотя карта содержит значение (Employee) с ключом (ID), который я ищу:пример проблемы

1 ответ

Это неизменяемая карта.

Упомянутые вами элементы данных инициализируются нулем:

private transient Set<K> keySet = null;
private transient Set<Map.Entry<K,V>> entrySet = null;
private transient Collection<V> values = null;

Методы с одинаковыми именами обращаются к базовой карте, чтобы возвращать ненулевые значения и кэшировать их в этих переменных при первом вызове.

public Set<K> keySet() {
    if (keySet==null)
    keySet = unmodifiableSet(m.keySet());
    return keySet;
}

public Set<Map.Entry<K,V>> entrySet() {
    if (entrySet==null)
    entrySet = new UnmodifiableEntrySet<K,V>(m.entrySet());
    return entrySet;
}

public Collection<V> values() {
    if (values==null)
    values = unmodifiableCollection(m.values());
    return values;
}

Поэтому, если вы вызовете эти три метода, вы увидите, что эти элементы данных больше не равны нулю.

Другие вопросы по тегам