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

OOP课程作业:银行类集合选型疑问(HashTable、TreeMap等)

关于银行应用集合选择的疑惑解答

嘿,这个问题问到点子上了!咱们一步步把核心逻辑理清楚:

1. 先明确题目要求的核心边界

题目明确要求使用基于哈希表的预定义集合实现Bank类,那首先得搞懂Java里哪些集合属于哈希表实现:

  • 符合要求的:java.util.HashMap、java.util.HashTable、java.util.HashSet(前两个是键值对映射结构,HashSet本质是基于HashMap实现的单元素集合)
  • 不符合要求的:java.util.TreeMap、java.util.TreeSet——它们的底层是红黑树(一种有序树形结构),完全不属于哈希表体系,哪怕它们有put、remove这些同名方法,也不满足题目里“基于哈希表”的硬性要求。

2. 为什么题目指定哈希表?

银行场景里,按账户主持有人查找、增删账户是高频操作,哈希表的这类操作平均时间复杂度是O(1),效率远高于红黑树的O(log n)。TreeMap/TreeSet的核心优势是有序性(比如按户主姓名排序),但题目没提排序需求,反而明确限定了哈希表实现,所以咱们得严格选哈希表类的集合。

3. 具体选哪个哈希表集合更合适?

  • 如果要建立“账户户主 → 账户对象”的映射关系,HashMap是最优选择:它线程不安全但效率高,适合作业这类单线程场景(HashTable是老版本的线程安全类,现在基本被HashMap+ConcurrentHashMap替代了)。
  • HashSet更适合存储不重复的单元素(比如存储所有账户户主的名字),但如果要关联户主和对应的账户,HashMap的键值对结构更直接清晰。

给你一个简单的Bank类实现示例:

import java.util.HashMap;
import java.util.Map;

public class Bank {
    // 键:账户户主姓名(假设用String类型),值:对应的账户对象
    private Map<String, Account> accountMap = new HashMap<>();

    // 注册账户
    public void registerAccount(String accountHolder, Account account) {
        accountMap.put(accountHolder, account);
    }

    // 根据户主查询账户
    public Account getAccountByHolder(String accountHolder) {
        return accountMap.get(accountHolder);
    }

    // 注销账户
    public void closeAccount(String accountHolder) {
        accountMap.remove(accountHolder);
    }
}

// 示例账户类
class Account {
    private String accountId;
    private double balance;

    // 构造器、getter/setter省略
    public Account(String accountId, double initialBalance) {
        this.accountId = accountId;
        this.balance = initialBalance;
    }
}

总结

TreeMap/TreeSet虽然API和哈希表集合有重叠,但底层实现完全不符合题目要求,所以不能用。优先选HashMap来实现“账户户主→账户”的映射,完美匹配题目需求。

内容的提问来源于stack exchange,提问作者Tufisi Radu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:45:17