在HashMap中操作存储为值的ArrayList

时间:2014-02-12 23:06:23

标签: java arraylist

我有一个HashMap,它将Id存储为密钥,将ArrayList存储为值。对于特定的键,我想获得相应的ArrayList并操作该ArrayList中的IEntity类型的元素之一。

我的问题是,当我更新元素的属性时,它会反映在HashMap内部的ArrayList中吗?或者我是否必须删除列表,替换列表中的该元素,然后再次插入该键的列表以查看HashMap中的反射值。我知道Java是值得传递的,但是有点难以理解这种情况。

以下是我的代码。感谢

ArrayList<IEntity> list = myMap.get(id);
Iterator<IEntity> itr = list.iterator();

        while(itr.hasNext()){               
            IEntity element = itr.next();
            if(element.checkSomeProperty() == false){
                element.setThatProperty(true);
// will above statement reflect the change in ArrayList stored in HashMap as well?
            }
        }

3 个答案:

答案 0 :(得分:3)

该元素也会在HashMap内更新。这是因为它包含对ArrayList的引用,而{{1}}又包含该元素。即使以某种方式修改元素,地图仍然指向同一个列表,该列表仍然保持并指向相同(现在已修改)的元素。

答案 1 :(得分:1)

Java为所有变量使用引用变量,包括Map中使用的实例变量。因此,您不需要重新插入它(除非您的地图克隆了对象,但Collection框架中的常用类没有)。

答案 2 :(得分:0)

容器包含对其元素的引用,因此更改元素也会立即反映在集合中。由于此属性,您不应该改变在MapSet中用作键的任何对象。