それはこのように動作します:
Set<Integer> nums = numMap.get(id);
nums.add(new Integer(0));
// now do i have to:
numMap.put(id,nums)?
// or is it already stored?
よろしく&&tianoircc
それはこのように動作します:
Set<Integer> nums = numMap.get(id);
nums.add(new Integer(0));
// now do i have to:
numMap.put(id,nums)?
// or is it already stored?
よろしく&&tianoircc
ディープ クローンを作成しない限り、元に戻す必要はありません。すべてが Java の参照に基づいて機能します。
簡単なプログラムを書くことで、いつでもこれをテストできます。
public static void main(String... args) {
Map<Integer, Set<Integer>> numMap = new HashMap<Integer, Set<Integer>>();
Set<Integer> set = new HashSet<Integer>();
set.add(10);
numMap.put(0, set);
System.out.println("Map before adding is " + numMap);
set.add(20);
System.out.println("Map after adding is " + numMap);
}
どのプリント
Map before adding is {0=[10]}
Map after adding is {0=[20, 10]}
いいえ、再度挿入する必要はありません。
は値への参照を格納し、 Set の内容を変更したからといってs参照numMap
は変更されません。Set
セットの内容を変更すると、セットのハッシュ コードが変更されるため、ハッシュ マップのキーとしてを使用した場合は、再挿入する必要があります。Set
Map<Set<Integer>, String> map = new HashSet<Set<Integer>, String>();
Set<Integer> nums = ...
map.put(nums, "Hello"); // Use a Set<Integer> as *key*.
nums.add(new Integer(0)); // This changes the keys hashCode (not allowed)
// now do i have to:
numMap.put(nums)?
キーを変更する前にマッピングを削除し、キーを変更した後にマッピングを再挿入する必要があります。