【问题标题】:Manipulate ArrayList stored as value in HashMap操作存储为 HashMap 中的值的 ArrayList
【发布时间】:2014-02-12 23:06:22
【问题描述】:

我有一个 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?
            }
        }

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-01
          • 2023-04-08
          • 1970-01-01
          • 2015-08-11
          相关资源
          最近更新 更多