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

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

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

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

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

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

HashMap.get(index).performOperation(); 

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

由于您的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"); 

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

 import java.util.*; public class Test { public static void main(String args[]) { Test test = new Test(); test.letsSee(); } public void letsSee() { List things = new ArrayList(); things.add(new Thing(1)); Thing thing = things.get(0); thing.i = 10; for (Thing t : things) { System.out.println(ti); } } } class Thing { public int i; public Thing(int i) { this.i = i; } } 

对,但是…

如果您更改的字段影响对象的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.