4

我正在读取一个文件以用保存的数据data.ser填充一些s。HashMap

尽管Map具有我应该具有的值,但KeySetEntrySet和 值都是空的。例如,Hashmap当我在调试模式下检查“Employees”时,它看起来像这样:

带有调试检查选项的哈希图:

有人可以帮我弄清楚它有什么问题吗?这种情况怎么可能发生?

尽管映射包含一个值 (Employee) 和键 (ID) 即时搜索,但返回空值的示例: 问题示例

4

1 回答 1

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 以返回非空值,并在第一次调用它们时将它们缓存在这些变量中。

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;
}

因此,如果您调用这三个方法,您将看到这些数据成员不再为空。

于 2014-08-27T21:29:59.833 回答