我有一個HashMap的值更改後「獲取」
private Map<String,List<ProductScheme>> discountMap = new HashMap<String,List<ProductScheme>>();
現在,如果我從discountMap
獲取列表,並在列表中添加項目 我將不得不再次投入discount map
名單,否則將不要求??
我有一個HashMap的值更改後「獲取」
private Map<String,List<ProductScheme>> discountMap = new HashMap<String,List<ProductScheme>>();
現在,如果我從discountMap
獲取列表,並在列表中添加項目 我將不得不再次投入discount map
名單,否則將不要求??
你只需要添加一個列表,如果它不存在之前。我使用的模式是
List<ProductScheme> list = discountMap.get(key);
if (list == null)
discountMap.put(key, list = new ArrayList<>());
list.add(value);
+1:'discountMap.put(key,list = new ArrayList <>());'nice – assylias 2012-08-08 10:50:35
我會使用'if(!discountMap.containsKey(key))'。 – nullpotent 2012-08-08 10:53:16
@iccthedral如果你可以有一個有效的'null'值,'containsKey'是有意義的。在這種情況下,一個'null'列表是無效的,只需要使用'get'而不是'containsKey'並且'get',如果它存在的話,即查找次數加倍。 – 2012-08-08 10:55:44
不,這不是必需的。 get
返回對地圖中存儲的列表的引用。因此,無論您使用get
(添加,刪除...)獲取的列表所做的任何修改都將反映在地圖列表中,因爲它們是同一個對象。
因爲你只獲取對象引用到您的列表從地圖上看,你不必再次把它的地圖。
List someList = discountMap.get("firstList");
仍然是相同的列表,只是另一個變量,在那裏存儲指向對象的指針。
NO。您不需要再次將修改的對象添加到discountMap變量。當你從地圖調用get方法時,它只返回該特定對象的引用(對象地址),並且你正在修改該地圖中的這個對象(實際上即使在地圖中,它也具有對象引用。對象,我們使用它的內存位置從兩個位置引用)使用上面的對象引用。
這對於我們使用其引用引用對象的所有情況都很常見。
不,當你做一個'GET'你列表的引用,所以什麼都沒有改變你做的列表在地圖 – st0le 2012-08-08 10:49:31
真棒問題同一個列表!我在我的低級Java上感到生鏽,我很高興有人用我能夠找到它的方式來表達他們的問題。 – Shadoninja 2016-06-27 18:37:02