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
相关产品推荐
相关产品推荐

