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?

问候 && tia noircc

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

不,您不必重新插入它。

numMap存储对值的引用,并且s引用Set不会因为您更改 Set 的内容而改变。

如果您Set用作哈希映射中的,则必须重新插入它,因为更改 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 回答