You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:30