比方說,我有一個HashMap稱爲myMap
,然後我從它那裏得到一個keySet
對象和修改keySet
在Java的HashMap中,從keySet中移除一個元素會影響hashmap對象嗎?
Set<Integer> keys = myMap.keySet();
keys.remove(1);
keys.remove(2);
如果MYMAP包含1
和2
因爲這個片段之前鍵,將myMap
被改變後該片段是執行?
比方說,我有一個HashMap稱爲myMap
,然後我從它那裏得到一個keySet
對象和修改keySet
在Java的HashMap中,從keySet中移除一個元素會影響hashmap對象嗎?
Set<Integer> keys = myMap.keySet();
keys.remove(1);
keys.remove(2);
如果MYMAP包含1
和2
因爲這個片段之前鍵,將myMap
被改變後該片段是執行?
是的。從鍵集中移除元素會從地圖中移除相應的條目。引述Javadoc:
set支持元素移除,即從映射中相應的映射,經由
Iterator.remove
,Set.remove
,removeAll
,retainAll
,和clear
操作。
jshell> HashMap<Integer, Integer> a = new HashMap<>();
a ==> {}
jshell> Set<Integer> b = a.keySet();
b ==> []
jshell> b
b ==> []
jshell> a.put(1,2)
$4 ==> null
jshell> a
a ==> {1=2}
jshell> b
b ==> [1]
jshell> b.remove(1)
$7 ==> true
jshell> a
a ==> {}
jshell> b
b ==> []
答案是肯定的。
這是一個不好的答案(IMO)。這只是Java的一個實現中的這種行爲的證據。證明是,javadocs *指定了這種行爲......並且這種行爲對於指定Map Map API的所有Java版本都是一致的。 –
同意,只是在這裏作爲補充發布 –