我正在阅读data.ser
文件,以便用保存的数据填充HashMap
个。{/ p>
虽然Map
具有我应该具有的值,但KeySet
,EntrySet
和值都为空。
例如,当我在调试模式下检查时,Hashmap
“Employees”看起来像这样:
有人可以帮我弄清楚它有什么问题吗?这种情况怎么可能呢?
虽然地图包含一个带有密钥(ID)即时搜索的值(Employee),但返回了一个空值的示例:
答案 0 :(得分:4)
这是一个UnmodifiableMap。
您提到的数据成员初始化为null:
private transient Set<K> keySet = null;
private transient Set<Map.Entry<K,V>> entrySet = null;
private transient Collection<V> values = null;
相同名称的方法访问底层Map以返回非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;
}
因此,如果您调用这三种方法,您将看到这些数据成员不再为空。