collection和map是java集合框架中并列的两个顶层接口,无继承关系;collection继承iterable,统管单值集合(list/set/queue),map独立存在,专注键值映射,二者在接口层级完全平行。

Collection 和 Map 是 Java 集合框架中两个完全独立、互不继承的顶层接口,不是父子关系,也不是并列子类——它们是同一层级的“双根”。理清拓扑结构的关键,是放弃“谁属于谁”的从属幻想,转而抓住“语义分层”这个设计原点。
Collection 体系:单值集合的统一抽象
Collection 接口继承自 Iterable,所有实现类都支持 for-each 和迭代器遍历。它本身不直接被实例化,而是通过三大子接口展开:
- List:强调有序、可重复、支持索引(如 ArrayList、LinkedList)
- Set:强调无序、唯一性(如 HashSet、TreeSet、LinkedHashSet)
- Queue / Deque:强调操作契约(入队/出队、FIFO/优先级/双端),不是数据组织形态(如 PriorityQueue、ArrayDeque)
Map 体系:键值映射的独立结构
Map 接口不继承任何接口,也不实现 Iterable。它不归 Collection 管,也不需要迭代器直接遍历自身——它的核心方法全是围绕 key 展开:put(K,V)、get(K)、remove(K)。常见实现包括 HashMap、TreeMap、LinkedHashMap。
注意:Map 的 keySet()、values()、entrySet() 返回的是视图(View),其中 keySet() 和 entrySet() 返回的是 Set 或 Collection 类型,但这只是“借用”了 Collection 体系的能力,并未改变 Map 自身的独立地位。
别被“内部依赖”带偏方向
有些实现细节容易造成误解,比如:
- HashSet 内部用 HashMap 存储元素(只存 key,value 固定为 PRESENT)
- TreeSet 内部用 TreeMap 实现排序逻辑
这些是实现优化,不是继承关系。就像汽车用发动机,但发动机不是汽车的父类——Map 和 Collection 在接口层级上始终平行。
画图时的正确姿势
画继承拓扑图时,应明确画出两个分离的树状结构:
- 左树根节点为 Collection → Iterable,向下分 List / Set / Queue 分支
- 右树根节点为 Map,无父节点,直接挂 HashMap / TreeMap / LinkedHashMap 等实现
- 两棵树之间可以加虚线标注“keySet() 返回 Set 视图”或“HashSet 基于 HashMap”,但绝不连线表示继承或实现











