“获取”后HashMap值的变化

时间:2012-08-08 10:47:03

标签: java

我有一个

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

现在,如果我从discountMap获取列表并在列表中添加项目 我是否必须再次将列表放在discount map中,否则将不需要?

4 个答案:

答案 0 :(得分:9)

不,不是必需的。 get返回对地图中存储的列表的引用。因此,对使用get(添加,删除...)获得的列表所做的任何修改也将反映在地图列表中,因为它们是同一个对象。

答案 1 :(得分:9)

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

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

答案 2 :(得分:0)

因为您只从地图中获取列表的对象引用,所以您不必再将它放到地图上。

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

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

答案 3 :(得分:0)

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

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

one useful link