Java集合关系图

Java 集合关系图

阅读方法:- extends:类继承类,或接口继承接口。 - implements:类实现接口。 - MapCollection 是两条独立主线,Map 不是 Collection 的子接口。 - 下表按 Java 8/17 常用集合层级整理;Java 21 新增的 Sequenced Collections 不影响 Stack extends Vector 等既有关系。

一眼看懂集合关系

Java 集合框架继承与实现关系 Collection:单值集合 List / Set / Queue 都从这里分支 Map:键值映射 独立体系,不属于 Collection Iterable Collection List Set Queue AbstractList CopyOnWriteArrayList ArrayList Vector Stack extends Vector HashSet NavigableSet LinkedHashSet TreeSet Deque ArrayDeque PriorityQueue LinkedList List + Deque Map HashMap NavigableMap LinkedHashMap TreeMap ConcurrentMap Hashtable ConcurrentHashMap Properties 箭头向下:父类型 → 子类型 extends implements 旧式类 推荐实现 写栈:Deque<E> stack = new ArrayDeque<>(); 不要优先使用 Stack

接口关系速查

子接口直接父接口关系与用途
Collection<E>Iterable<E>所有单值集合的根接口,可用于增强 for 循环
List<E>Collection<E>有序、可重复、可按下标访问
Set<E>Collection<E>元素不可重复
SortedSet<E>Set<E>按规则排序的集合
NavigableSet<E>SortedSet<E>支持相邻元素、范围和反向查询
Queue<E>Collection<E>队列,通常按先进先出处理元素
Deque<E>Queue<E>双端队列,也可作为栈使用
BlockingQueue<E>Queue<E>支持阻塞式生产与消费
BlockingDeque<E>BlockingQueue<E>, Deque<E>支持阻塞操作的双端队列
Map<K, V>键值映射,与 Collection 平行
SortedMap<K, V>Map<K, V>按键排序的映射
NavigableMap<K, V>SortedMap<K, V>支持相邻键、范围和反向查询
ConcurrentMap<K, V>Map<K, V>面向并发访问的映射

实现类关系速查

实现类直接父类主要实现接口关键关系与特点
代码块JAVA · 2 行收起展开
| `ArrayList<E>` | `AbstractList<E>` | `List<E>`, `RandomAccess` | 动态数组;随机访问快 |
| `LinkedList<E>` | `AbstractSequentialList<E>` | `List<E>`, `Deque<E>` | 双向链表;既是列表,也是双端队列 |

| Vector<E> | AbstractList<E> | List<E>, RandomAccess | 旧式线程安全动态数组,常用方法带同步 |
| Stack<E> | Vector<E> | 继承 Vector 已实现的接口 | Stack extends Vector;旧式栈,现代代码优先使用 Deque |
| HashSet<E> | AbstractSet<E> | Set<E> | 底层主要由 HashMap 保存元素 |
| LinkedHashSet<E> | HashSet<E> | Set<E> | 在哈希集合基础上维护插入顺序 |
| TreeSet<E> | AbstractSet<E> | NavigableSet<E> | 底层主要由 TreeMap 实现,元素有序 |
| PriorityQueue<E> | AbstractQueue<E> | Queue<E> | 基于优先级出队,不保证遍历时整体有序 |
| ArrayDeque<E> | AbstractCollection<E> | Deque<E> | 数组双端队列;通常用于替代 Stack 和普通队列实现 |
| HashMap<K, V> | AbstractMap<K, V> | Map<K, V> | 常用哈希映射,不保证遍历顺序 |
| LinkedHashMap<K, V> | HashMap<K, V> | Map<K, V> | 维护插入顺序或访问顺序,可用于实现 LRU |
| TreeMap<K, V> | AbstractMap<K, V> | NavigableMap<K, V> | 按键排序的红黑树映射 |
| Hashtable<K, V> | Dictionary<K, V> | Map<K, V> | 旧式线程安全映射,不允许 null 键和值 |
| Properties | Hashtable<Object, Object> | 继承 Hashtable 已实现的接口 | 面向配置属性;常用 API 按字符串键值使用 |
| ConcurrentHashMap<K, V> | AbstractMap<K, V> | ConcurrentMap<K, V> | 高并发映射,不允许 null 键和值 |
| CopyOnWriteArrayList<E> | Object | List<E>, RandomAccess | 写时复制,适合读多写少 |

最容易混淆的关系

容易混淆的说法正确结论
Stack 实现了 List间接正确:Stack extends Vector,而 Vector implements List
LinkedList 只能当链表使用错误:它同时实现了 ListDeque
HashSet 继承 HashMap错误:HashSet extends AbstractSet,内部使用 HashMap 存储元素
TreeSet 继承 TreeMap错误:TreeSet extends AbstractSet,内部使用有序 Map 实现
Map 属于 Collection错误:二者是独立接口体系
新代码应使用 Stack 表示栈通常不推荐:优先声明为 Deque<E>,实现使用 ArrayDeque<E>
代码块JAVA · 4 行收起展开
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.push(2);
int top = stack.pop(); // 2

延伸阅读