前言
Java集合框架(Java Collections Framework,JCF)是Java中用于存储和操作一组对象的核心工具。它提供了一系列接口、实现类和算法,使得开发者能够高效地处理数据集合。
java集合框架
上面的图是从菜鸟教程搬过来的,解读如下:
- 所有的集合类都在java.util包下,java集合类是由两个接口派生出来的,分别是collection(集合)和Map(图)。
- collection接口有三种子类型,分别是:List、Set、Queue,再下面就是各种抽象类,最后是具体的实现类。
注意Map不是Collection的子接口
- Map接口是键-值对象顶层接口,下面还包含了一些子接口和实现类。AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。Hashtable虽然继承于Dictionary,但它实现了Map接口。
java集合各自的特点
java集合 | 特点 | 实现类 |
---|---|---|
List | 有序可重复 | ArrayList、LinkedList、Vector、Stack |
Set | 无序不可重复 | HashSet、TreeSet、LinkedHashSet |
Queue | 遵循先进先出(FIFO)原则 | LinkedList、PriorityQueue、ArrayDeque |
Map | 键值对集合,不允许键重复 | HashMap、LinkedHashMap、TreeMap、Hashtable |
下面对几个主要的java集合的实现类进行比较:
- List实现类的比较:
List实现类 | 底层实现 | 特点 |
---|---|---|
ArrayList | 动态数组 | 支持快速随机访问,但插入和删除元素慢 |
LinkedList | 双向链表 | 随机访问慢,插入和删除快 |
Vector | 动态数组 | 线程安全,性能较差 |
Stack | 栈 | 实现后进先出的栈结构 |
- Set实现类的比较:
Set实现类 | 底层实现 | 特点 |
---|---|---|
HashSet | 哈希表 | 元素无序,添加、删除和查找操作的时间复杂度为O(1) |
TreeSet | 红黑树 | 元素有序,添加、删除和查找操作的时间复杂度为O(log n) |
LinkedHashSet | 哈希表和链表 | 元素按插入顺序排序 |
- Queue实现类的比较:
Queue实现类 | 底层实现 | 特点 |
---|---|---|
LinkedList | 双向链表 | 实现了Queue接口,可以用作队列 |
PriorityQueue | 基于堆实现的优先级队列 | 元素按自然顺序或指定比较器排序 |
ArrayDeque | 基于动态数组实现的双端队列 | 支持在两端插入和删除元素 |
- Map实现类的比较:
Map实现类 | 底层实现 | 特点 |
---|---|---|
HashMap | 哈希表 | 键值对无序,添加、删除和查找操作的时间复杂度为O(1) |
LinkedHashMap | 哈希表和链表 | 键值对按插入顺序排序 |
TreeMap | 红黑树 | 键值对有序,添加、删除和查找操作的时间复杂度为O(log n) |
Hashtable | 哈希表 | 线程安全的键值对集合,性能较差 |
List和Set的区别
- Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
- Set 检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
- List 和数组类似,可以动态增长,根据实际存储的数据的长度自动增长 List 的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。