使用java更新ArrayList / HashMap中的元素

时间:2011-11-19 16:03:35

标签: java arraylist hashmap

我正在为uni做一些课程,我真的应该知道这一点,但我不确定如何更新存储在HashMap中的对象。

我有一个抽象的'User'类,它扩展为'Customer'和'Staff'类,其实例存储在名为'mapUsers'的HashMap中。

我认为可以完成的方法是将要修改的元素保存到 temp 'User'对象中,在这个临时实例上我可以以任何必要的方式修改Object。

我真正的问题是,这会更新存储在HashMap中的对象,还是我必须删除存储在HashMap中的元素,并用修改后的 temp 实例替换。

有没有更简单的方法来做到这一点,我想也许像

HashMap.get(index).performOperation();

类似的东西,我可以在不删除元素的情况下执行操作。

3 个答案:

答案 0 :(得分:11)

由于您的HashMap拥有引用,请执行以下操作:

Person p = new Person();
p.setName("John");
hashMap.put(1, p);
p.setName("Jack");

也会在HashMap内更改名称,因为两个引用都指向相同的内容。

或者,假设p中已有HashMap

Person p = hashMap.get(1);
p.setName("Jack");

答案 1 :(得分:2)

在这种情况下我会做的是 - 尝试一下。简而言之,您获得的是引用而不是值,因此对引用所做的更改将反映在集合中。

import java.util.*;

public class Test {
    public static void main(String args[]) {
        Test test = new Test();
        test.letsSee();
    }

    public void letsSee() {
        List<Thing> things = new ArrayList<Thing>();
        things.add(new Thing(1));
        Thing thing = things.get(0);
        thing.i = 10;
        for (Thing t : things) {
            System.out.println(t.i);
        }
    }

}

class Thing
{
    public int i;

    public Thing(int i) {
        this.i = i;
    }
}

答案 2 :(得分:0)

是的,但是......

如果您更改的字段影响对象的hashCode(),则会发生错误。因为如果您稍后搜索该对象,它将不在正确的bin中,您将无法找到它。

例如,Jane结婚了,但你也使用她的名字作为哈希键。

map.get("Jane Meyer").setName("Jane Meyer-Jones");  // "legal"

map.get("Jane Meyer") returns the new married version of "Jane Meyer-Jones".
but
map.get("Jane Meyer-Jones") returns null.