2012-08-08 78 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