2012-04-20 48 views
0

它的工作原理是這樣的:從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

+0

'numMap.put(nums)'沒有意義。鑰匙在哪裏? – aioobe 2012-04-20 11:54:29

+0

我的不好,應該是numMap.put(id,nums) – noircc 2012-04-23 08:57:21

回答

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]} 
2

不,你不必重新插入。

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)? 

您需要在更改密鑰之前刪除映射,並在更改密鑰後重新插入映射。

相關問題