它的工作原理是這樣的:從Map中獲取HashSet並更改後,是否必須將其還原?
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
它的工作原理是這樣的:從Map中獲取HashSet並更改後,是否必須將其還原?
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
你不必把它放回去,除非你做它的一個深克隆。一切工作都基於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]}
不,你不必重新插入。
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)?
您需要在更改密鑰之前刪除映射,並在更改密鑰後重新插入映射。
'numMap.put(nums)'沒有意義。鑰匙在哪裏? – aioobe 2012-04-20 11:54:29
我的不好,應該是numMap.put(id,nums) – noircc 2012-04-23 08:57:21