为什么 Map 不继承 Collection?
查看完整题解
参考回答
直接回答
Collection 的基本单位是一个元素,Map 的基本单位是键到值的映射。Map 的 put 需要两个角色,键必须唯一而值可以重复,无法直接套用 Collection.add 的单元素语义。因此,Java 把它们设计成两个接口分支,再通过 keySet、values、entrySet 提供集合视图。
讲清原理
Map 当然包含一组条目,但公开 API 还需要明确键值各自的含义。若把它直接当作元素集合,add 到底添加键、值还是条目就需要额外约定,容易掩盖重复键覆盖等规则。
三个视图各自表达不同内容:keySet 是唯一键集合,values 可有重复值,entrySet 是键值条目集合。它们通常连接原映射,通过支持的删除操作修改视图,会反映到映射中;不能一般地通过 keySet.add 建立映射。
例子与易错点
Java 21 的 main 片段:
var map = new java.util.HashMap<String, Integer>();
map.put("A", 1);
map.put("B", 1);
System.out.println(map.values().size());
map.keySet().remove("A");
System.out.println(map.containsKey("A"));
输出 2、false。values 中两个 1 不会自动去重;视图也不是默认复制出的快照。需要独立键集合时,可显式复制。
相关题:第 1 题、第 9 题、第 17 题、第 34 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。