4

I have a

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

now if i get list from discountMap and add an item in list will i have to put the list again in discount map or it will not be required ??

4

4 回答 4

11

不,这不是必需的。get返回对存储在地图中的列表的引用。因此,无论您对使用 (add, remove...) 获得的列表所做的任何修改都get将反映在地图中的列表上,因为它们是同一个对象。

于 2012-08-08T10:48:01.860 回答
9

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

List<ProductScheme> list = discountMap.get(key);
if (list == null)
    discountMap.put(key, list = new ArrayList<>());
list.add(value);
于 2012-08-08T10:49:56.313 回答
0

由于您只能从地图中获取对列表的对象引用,因此您不必再次将其放入地图。

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

仍然是同一个列表,只是另一个变量,用于存储指向对象的指针。

于 2012-08-08T10:52:57.267 回答
0

不。您无需将修改后的对象再次添加到 discountMap 变量中。当您从地图调用 get 方法时,它仅返回该特定对象的引用(对象地址),并且您正在修改地图中存在的该对象(实际上即使在地图中,它也具有对象引用。所以相同我们使用其内存位置从两个位置引用的对象)使用上面的对象引用。

这对于我们使用其引用来引用对象的所有情况都是常见的。

一个有用的链接

于 2012-08-08T13:03:36.087 回答