Java集合关系图
Java 集合关系图
阅读方法:- extends:类继承类,或接口继承接口。 - implements:类实现接口。 - Map 与 Collection 是两条独立主线,Map 不是 Collection 的子接口。 - 下表按 Java 8/17 常用集合层级整理;Java 21 新增的 Sequenced Collections 不影响 Stack extends Vector 等既有关系。
一眼看懂集合关系
接口关系速查
| 子接口 | 直接父接口 | 关系与用途 |
|---|
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 只能当链表使用 | 错误:它同时实现了 List 和 Deque |
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
延伸阅读