我有一个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?
}
}
答案 0 :(得分:3)
该元素也会在HashMap
内更新。这是因为它包含对ArrayList
的引用,而{{1}}又包含该元素。即使以某种方式修改元素,地图仍然指向同一个列表,该列表仍然保持并指向相同(现在已修改)的元素。
答案 1 :(得分:1)
Java为所有变量使用引用变量,包括Map
中使用的实例变量。因此,您不需要重新插入它(除非您的地图克隆了对象,但Collection
框架中的常用类没有)。
答案 2 :(得分:0)
容器包含对其元素的引用,因此更改元素也会立即反映在集合中。由于此属性,您不应该改变在Map
或Set
中用作键的任何对象。