基于UML类图的Java银行系统:HashMap存储账户添加问题
向Bank类的HashMap中为指定Person添加账户的实现方案
嗨,针对你基于UML类图实现银行管理软件的需求,我来帮你解决如何给指定Person对应的ArrayList添加账户的问题~
首先,你采用的HashMap<Person, ArrayList<Account>>这个存储结构是符合组合关系设计的,假设你的Bank类里已经定义了这个成员变量:
private HashMap<Person, ArrayList<Account>> personAccounts = new HashMap<>();
接下来,你可以在Bank类中编写一个专门的方法来处理添加逻辑,这里需要覆盖两种场景:该Person已经在HashMap中,或者还未被添加到Bank中。
完整方法实现
public void addAccountToPerson(Person p, Account account) { // 尝试从HashMap中获取该Person对应的账户列表 ArrayList<Account> accounts = personAccounts.get(p); if (accounts == null) { // 如果列表不存在,说明该Person还未被纳入Bank管理,先初始化列表并放入Map accounts = new ArrayList<>(); personAccounts.put(p, accounts); } // 将新账户添加到该Person的账户列表中 accounts.add(account); }
关键注意事项
- 务必重写Person类的equals和hashCode方法:HashMap依赖这两个方法来判断两个Person对象是否为同一个key。如果不重写,即使两个Person的属性完全一致,HashMap也会将它们视为不同的key,导致无法正确找到对应的账户列表。以下是基于唯一标识(比如id)的重写示例:
import java.util.Objects; public class Person { private String id; // 其他属性、构造方法、getter/setter @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return Objects.equals(id, person.id); } @Override public int hashCode() { return Objects.hash(id); } }
- 如果你已经实现了
addPerson方法,也可以在添加Person时就预先初始化一个空的ArrayList,这样后续添加账户时可以省略null判断,但上面的方法是更健壮的通用写法,不管Person是否已被添加都能正常工作。
之后你就可以通过类似bank.addAccountToPerson(p, new SpendingAccount())或者bank.addAccountToPerson(p, new SavingAccount())的调用,轻松给指定Person添加对应的账户啦~
内容的提问来源于stack exchange,提问作者Rares Macavei
相关产品推荐
相关产品推荐

