它的工作原理如下:
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?
问候&amp;&amp; TIA noircc
答案 0 :(得分: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]}
答案 1 :(得分:2)
不,你不必重新插入它。
numMap
将引用存储到值中,Set
s引用不会因为您更改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)?
您需要在更改密钥之前删除映射,并在更改密钥后重新插入映射。