Java 中的集合类(Java Collections Framework,JCF)是 Java 用来存储和操作一组对象的数据结构体系,主要位于:
java.util 包
它的核心可以分为两大体系:
Collection 接口体系 → 存储单个元素
Map 接口体系 → 存储键值对(key-value)
一、Java 集合框架总览图(结构图)
下面是 Java 集合体系的核心框架图:
Iterable
│
Collection
├── List
│ ├── ArrayList
│ ├── LinkedList
│ └── Vector
│
├── Set
│ ├── HashSet
│ │ └── LinkedHashSet
│ └── TreeSet
│
└── Queue
└── PriorityQueue
Map(独立体系)
│
┌────┼──────────────┬──────────────┐
│ │ │ │
HashMap LinkedHashMap TreeMap Hashtable
二、Collection 接口体系
Collection 是单列集合的根接口。
特点:
Collection<E>
常用方法:
add(E e)
remove(Object o)
contains(Object o)
size()
clear()
isEmpty()
iterator()
三、List 集合(有序、可重复)
List 的特点:
✅ 元素有顺序
✅ 可以重复
✅ 可以通过索引访问
1. ArrayList
底层:
动态数组
特点:
查询快
随机访问快
增删慢(中间位置)
示例:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.get(0));
适用:
✅ 查询多
✅ 增删少
底层结构图
index: 0 1 2 3
┌────┬────┬────┬────┐
data = │ A │ B │ C │ D │
└────┴────┴────┴────┘
2. LinkedList
底层:
双向链表
特点:
插入快
删除快
查询慢
示意:
A <--> B <--> C <--> D
代码:
List<String> list = new LinkedList<>();
list.add("A");
list.add("B");
适用:
✅ 增删频繁
3. Vector
老版本线程安全集合。
特点:
线程安全
性能较低
Vector<String> vector = new Vector<>();
现在很少使用。
4. Stack
继承 Vector,栈结构:
先进后出(LIFO)
Stack<String> stack = new Stack<>();
stack.push("A");
stack.pop();
四、Set 集合(无序、不可重复)
特点:
✅ 不允许重复
❌ 没有索引
1. HashSet
底层:
HashMap
特点:
无序
去重
查询快
Set<String> set = new HashSet<>();
set.add("A");
set.add("A"); // 不会重复
底层图
哈希表结构
桶(bucket) + 链表/红黑树
bucket[0] → null
bucket[1] → A → B
bucket[2] → C
2. LinkedHashSet
特点:
去重
保留插入顺序
Set<String> set = new LinkedHashSet<>();
3. TreeSet
底层:
红黑树
特点:
自动排序
不重复
Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
输出:
1 2 3
五、Queue 队列集合
特点:
先进先出(FIFO)
1. PriorityQueue
优先级队列:
Queue<Integer> q = new PriorityQueue<>();
特点:
自动排序
优先级高先出
2. LinkedList 也可作队列
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.poll();
六、Map 集合(键值对)
Map 不属于 Collection。
结构:
key -> value
1. HashMap(最常用)
特点:
✅ key唯一
✅ 无序
✅ 允许一个null key
Map<Integer,String> map = new HashMap<>();
map.put(1,"Tom");
底层(JDK8)
数组 + 链表 + 红黑树
结构:
table[0]
table[1] → Node → Node → TreeNode
table[2]
2. LinkedHashMap
特点:
保持插入顺序
Map<Integer,String> map = new LinkedHashMap<>();
3. TreeMap
特点:
key 自动排序
Map<Integer,String> map = new TreeMap<>();
4. Hashtable
老版本线程安全:
Map<String,String> map = new Hashtable<>();
特点:
线程安全
不允许 null
七、各集合对比表
八、线程安全集合
Java 还提供并发集合:
例如:
Java Platform, Standard Edition 中的并发包:
java.util.concurrent
示例:
Map<String,String> map = new ConcurrentHashMap<>();
九、如何选择集合
一般选择原则:
查询多
ArrayList
HashMap
增删多
LinkedList
去重
HashSet
排序
TreeSet
TreeMap
线程安全
ConcurrentHashMap
CopyOnWriteArrayList
十、最常用的几个
实际开发最常用:
ArrayList
HashMap
HashSet
LinkedHashMap
ConcurrentHashMap