Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

为什么 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 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。