当表不为空时,HashMap的KeySet,EntrySet和值为null

时间:2014-08-27 21:23:48

标签: java eclipse collections hashmap keyset

我正在阅读data.ser文件,以便用保存的数据填充HashMap个。{/ p>

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

hashmap as shown with debugs inspect option:

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

虽然地图包含一个带有密钥(ID)即时搜索的值(Employee),但返回了一个空值的示例: problem example

1 个答案:

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

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