2012-08-08 48 views
3

我有一個HashMap的值更改後「獲取」

private Map<String,List<ProductScheme>> discountMap = new HashMap<String,List<ProductScheme>>(); 

現在,如果我從discountMap獲取列表,並在列表中添加項目 我將不得不再次投入discount map名單,否則將不要求??

+0

不,當你做一個'GET'你列表的引用,所以什麼都沒有改變你做的列表在地圖 – st0le 2012-08-08 10:49:31

+0

真棒問題同一個列表!我在我的低級Java上感到生鏽,我很高興有人用我能夠找到它的方式來表達他們的問題。 – Shadoninja 2016-06-27 18:37:02

回答

9

你只需要添加一個列表,如果它不存在之前。我使用的模式是

List<ProductScheme> list = discountMap.get(key); 
if (list == null) 
    discountMap.put(key, list = new ArrayList<>()); 
list.add(value); 
+3

+1:'discountMap.put(key,list = new ArrayList <>());'nice – assylias 2012-08-08 10:50:35

+0

我會使用'if(!discountMap.containsKey(key))'。 – nullpotent 2012-08-08 10:53:16

+1

@iccthedral如果你可以有一個有效的'null'值,'containsKey'是有意義的。在這種情況下,一個'null'列表是無效的,只需要使用'get'而不是'containsKey'並且'get',如果它存在的話,即查找次數加倍。 – 2012-08-08 10:55:44

9

不,這不是必需的。 get返回對地圖中存儲的列表的引用。因此,無論您使用get(添加,刪除...)獲取的列表所做的任何修改都將反映在地圖列表中,因爲它們是同一個對象。

0

因爲你只獲取對象引用到您的列表從地圖上看,你不必再次把它的地圖。

List someList = discountMap.get("firstList"); 

仍然是相同的列表,只是另一個變量,在那裏存儲指向對象的指針。

0

NO。您不需要再次將修改的對象添加到discountMap變量。當你從地圖調用get方法時,它只返回該特定對象的引用(對象地址),並且你正在修改該地圖中的這個對象(實際上即使在地圖中,它也具有對象引用。對象,我們使用它的內存位置從兩個位置引用)使用上面的對象引用。

這對於我們使用其引用引用對象的所有情況都很常見。

one useful link