我正在閱讀data.ser
文件以填充一些HashMap
s已保存的數據。HashMap的KeySet,EntrySet和值爲空,而表不爲空
儘管Map
具有我應該擁有的值,但KeySet
,EntrySet
和值均爲空。 例如,Hashmap
「員工」是這樣的,當我檢查它在調試模式:
有人可以幫助我弄清楚什麼是錯呢?這種情況怎麼可能呢?
爲雖然地圖返回一個空值的實例包含一個值(員工)與密鑰(ID)IM搜索:
我正在閱讀data.ser
文件以填充一些HashMap
s已保存的數據。HashMap的KeySet,EntrySet和值爲空,而表不爲空
儘管Map
具有我應該擁有的值,但KeySet
,EntrySet
和值均爲空。 例如,Hashmap
「員工」是這樣的,當我檢查它在調試模式:
有人可以幫助我弄清楚什麼是錯呢?這種情況怎麼可能呢?
爲雖然地圖返回一個空值的實例包含一個值(員工)與密鑰(ID)IM搜索:
這是一個UnmodifiableMap。
你提到的被初始化爲空的數據成員:
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;
}
因此,如果你調用這三個方法,你會看到那些數據成員不再是零。
**感謝您的回答**。我很難弄清楚放置這些方法的適當位置。原因是,我有一個準備好的java程序,我打算爲它編寫一個合適的GUI。更重要的是,有多個HashMap作爲這個程序的數據庫在「view」類中聲明。正如你所提到的,吸氣者的確發送了這些地圖的一個不可修改的地圖。 – Roi811 2014-08-27 22:07:00
你爲什麼對這些內部領域感興趣?如果你使用公共方法,HashMap的行爲正確,對吧? – WonderCsabo 2014-08-27 21:30:30
如果我嘗試按給定的鍵搜索地圖,它總是返回null,因爲keySet爲空。我認爲。 – Roi811 2014-08-27 21:34:13
@ Roi811如果底層的Map(存儲在'm'成員中)包含該鍵,它將不會返回null。 – Eran 2014-08-27 21:35:59