KeySet, EntrySet и значения HashMap равны нулю, а таблица не пуста
Я читаю data.ser
файл, чтобы заполнить некоторые HashMap
с сохраненными данными.
Хотя Map
имеет значения, которые я должен иметь, KeySet
, EntrySet
и все значения равны нулю. например, 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;
}
Поэтому, если вы вызовете эти три метода, вы увидите, что эти элементы данных больше не равны нулю.