0

それはこのように動作します:

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

4

2 に答える 2

5

ディープ クローンを作成しない限り、元に戻す必要はありません。すべてが 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]}
于 2012-04-20T11:47:25.457 に答える
1

いいえ、再度挿入する必要はありません。

は値への参照を格納し、 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)?

キーを変更する前にマッピングを削除し、キーを変更した後にマッピングを再挿入する必要があります。

于 2012-04-20T11:52:17.390 に答える