Java集合框架的核心接口、抽象类及其具体实现类之间通过继承关系进行丰富且层次分明的设计
顶层接口与接口间关系
Iterable
接口
位于最顶层的是java.lang.Iterable
接口,它是所有集合类(包括Collection
、Map
等)的根接口,定义了一个通用的方法iterator()
,用于返回一个遍历集合元素的迭代器。
Collection
接口
java.util.Collection
接口直接继承自Iterable
接口,是集合框架的核心接口之一,它代表一组对象的集合,提供了对集合元素的基本操作,如添加、删除、查询大小、是否为空、是否包含某个元素等。Collection
接口有以下直接子接口:
List
:有序、可重复元素的集合,允许通过索引来访问元素,并提供插入、移除和定位元素的方法。Set
:不允许包含重复元素的集合,没有索引,但可能根据某种排序规则对元素进行排序或保持其自然顺序。Queue
:先进先出(FIFO)或后进先出(LIFO)的队列接口,通常用于处理等待执行的任务或其他待处理的数据。Deque
(双端队列):同时支持两端插入和移除元素的线性集合,扩展了Queue接口。
Map
接口
虽然Map
接口并不直接继承自Collection
,但它也是集合框架的重要组成部分,表示键值对的集合。每个键唯一,与一个值相关联。Map
接口提供了添加、删除、查找键值对以及检查键是否存在等操作。
抽象类与实现类
在接口之下,有一些抽象类作为实现接口的骨架,提供了部分通用逻辑,具体的集合类再继承这些抽象类以减少重复代码。例如:
AbstractCollection
:实现了Collection
接口的部分或全部方法,为具体集合类提供了一种通用实现。AbstractList
:继承自AbstractCollection
,并实现了List
接口,为有序列表的实现提供了基础。AbstractSet
:继承自AbstractCollection
,并实现了Set
接口,简化了无重复元素集合的实现。AbstractQueue
:继承自AbstractCollection
,并实现了Queue
接口,为队列实现提供通用功能。AbstractMap
:实现了Map
接口的大部分方法,为具体映射类提供基础实现。
具体实现类
Java集合框架提供了多种具体实现类,它们继承或实现上述接口及抽象类,以满足不同场景下的性能、并发需求和特定功能。例如:
对于List
接口:
ArrayList
:基于动态数组实现,支持快速随机访问,但在中间插入和删除元素时效率较低。LinkedList
:基于双向链表实现,插入和删除操作效率较高,但随机访问速度较慢。Vector
:与ArrayList
类似,但线程同步,适用于多线程环境,但并发性能不如并发集合类如CopyOnWriteArrayList
。
对于Set
接口:
HashSet
:基于哈希表实现,无序,高效查找和插入。TreeSet
:基于红黑树实现,有序,自动维护元素排序。LinkedHashSet
:结合了HashSet
和LinkedList
的特点,既保证元素唯一,又按元素插入顺序进行迭代。
对于Queue
接口:
PriorityQueue
:优先队列,基于堆结构实现,队列中的元素按自然排序或比较器排序。ArrayDeque
:基于循环数组实现的双端队列,常用于替代LinkedList
作为高效的队列或栈。
对于Map
接口:
HashMap
:基于哈希表实现,无序,高效查找和插入。TreeMap
:基于红黑树实现,有序,自动维护键的排序。LinkedHashMap
:结合了HashMap
和LinkedList
的特点,保留插入顺序或最近最少使用(LRU)顺序。ConcurrentHashMap
:线程安全的哈希表,适用于高并发环境。
总结
Java集合框架的继承关系如下:
Code
1Iterable
2 └── Collection
3 ├── List
4 │ ├── AbstractList
5 │ │ ├── ArrayList
6 │ │ ├── LinkedList
7 │ │ └── ... (其他具体List实现)
8 │ └── ... (其他List实现,可能直接实现List接口)
9 ├── Set
10 │ ├── AbstractSet
11 │ │ ├── HashSet
12 │ │ ├── TreeSet
13 │ │ └── LinkedHashSet
14 │ └── ... (其他Set实现,可能直接实现Set接口)
15 ├── Queue
16 │ ├── AbstractQueue
17 │ │ ├── PriorityQueue
18 │ │ ├── ArrayDeque
19 │ │ └── ... (其他具体Queue实现)
20 │ └── ... (其他Queue实现,可能直接实现Queue接口)
21 └── Deque
22 ├── ArrayDeque
23 └── ... (其他具体Deque实现)
此外,Map
接口与Collection
接口并列,但不直接继承自Collection
:
Code
1Map
2 ├── AbstractMap
3 │ ├── HashMap
4 │ ├── TreeMap
5 │ ├── LinkedHashMap
6 │ ├── ConcurrentHashMap
7 │ └── ... (其他具体Map实现)
8 └── ... (其他Map实现,可能直接实现Map接口)