Java HashMap';s键集、入口集和值为null,而表不为空
我正在读取一个Java HashMap';s键集、入口集和值为null,而表不为空,java,eclipse,collections,hashmap,keyset,Java,Eclipse,Collections,Hashmap,Keyset,我正在读取一个data.ser文件,用保存的数据填充一些HashMaps 虽然映射具有我应该具有的值,但是键集、入口集和值都是空的。 例如,Hashmap“Employees”在调试模式下检查时如下所示: 有人能帮我找出它的毛病吗?这种情况怎么可能呢 虽然映射包含一个值(Employee)且键(ID)为im searching,但返回空值的示例: 这是一个好消息 您提到的数据成员已初始化为空: private transient Set<K> keySet = null; priv
data.ser
文件,用保存的数据填充一些HashMap
s
虽然映射
具有我应该具有的值,但是键集
、入口集
和值都是空的。
例如,Hashmap
“Employees”在调试模式下检查时如下所示:
有人能帮我找出它的毛病吗?这种情况怎么可能呢
虽然映射包含一个值(Employee)且键(ID)为im searching,但返回空值的示例:
这是一个好消息
您提到的数据成员已初始化为空:
private transient Set<K> keySet = null;
private transient Set<Map.Entry<K,V>> entrySet = null;
private transient Collection<V> values = null;
private transient Set keySet=null;
私有瞬态集entrySet=null;
私有临时集合值=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;
}
公共设置键集(){
如果(键集==null)
keySet=不可修改集(m.keySet());
返回键集;
}
公共集入口集(){
if(entrySet==null)
entrySet=新的不可修改的entrySet(m.entrySet());
返回入口集;
}
公共集合值(){
如果(值==null)
values=不可修改的集合(m.values());
返回值;
}
因此,如果调用这三个方法,您将看到这些数据成员不再为null。为什么您对这些内部字段感兴趣?如果使用它的公共方法,HashMap的行为是正确的,对吗?如果我尝试按给定的键搜索映射,它总是返回null,因为keySet为null。我认为,@Roi811如果基础映射(存储在
m
成员中)包含该键,它不会返回null。我对此表示怀疑。Map
返回null,因为要么键不存在,要么键的值确实是null
@Roi811如果您发布您遇到的实际问题,您将获得更有效的帮助(如果我尝试按给定键搜索Map,它总是返回null,并且elaborate/给出示例),而不是只展示你所研究的一小部分。谢谢你的回答。我很难找到合适的地方放置这些方法。原因是,我有一个准备好的java程序,我有能力为它编写一个合适的GUI。此外,还有多个HashMap作为这个程序的DB,在“view”类中声明。正如您所提到的,getter确实会发送这些映射的不可修改映射。