2017-04-22 5 views
0

myMap変更されます、のは、私は、私はそれからkeySetオブジェクトを取得し、HashMapのはmyMapと呼ばれる持っていると言うとMYMAPは、このスニペットの前にキーとして12が含まれている場合keySetJavaのHashMapでは、keySetから要素を削除するとhashmapオブジェクトに影響しますか?このスニペットは後

Set<Integer> keys = myMap.keySet(); 
keys.remove(1); 
keys.remove(2); 

を変更実行された?

答えて

4

はい。キーセットから要素を削除すると、対応するエントリがマップから削除されます。 Javadocを引用:

セットは、Iterator.remove介して、マップから対応するマッピングを削除する要素削除処理をサポートSet.removeremoveAllretainAll、及びclear操作。

0
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 ==> [] 

答えははいです。

+2

これは貧弱な回答です(IMO)。これは、Javaの1つの実装でのこの動作の証拠にすぎません。この動作は、javadoc *がこの動作を指定していることを証明しています。この動作は 'Map' APIを指定するすべてのJavaバージョンで一貫しています。 –

+0

に同意し、補足としてここに投稿してください –

関連する問題