Java 常见集合框架详解
Java 集合框架是数据处理的核心,涵盖 List、Set、Map、Queue 四大体系。梳理了 ArrayList、LinkedList、HashMap 等常用类的实现原理、线程安全性及性能特点。重点对比了不同场景下的选择策略,如随机访问选 ArrayList、频繁增删选 LinkedList、并发环境用 ConcurrentHashMap。通过源码机制解析(如扩容、红黑树转换)和复杂度分析,帮助开发者避免性能陷阱,写出高效健壮的代码。

Java 集合框架是数据处理的核心,涵盖 List、Set、Map、Queue 四大体系。梳理了 ArrayList、LinkedList、HashMap 等常用类的实现原理、线程安全性及性能特点。重点对比了不同场景下的选择策略,如随机访问选 ArrayList、频繁增删选 LinkedList、并发环境用 ConcurrentHashMap。通过源码机制解析(如扩容、红黑树转换)和复杂度分析,帮助开发者避免性能陷阱,写出高效健壮的代码。

在 Java 的世界里,集合框架支撑着数据处理的核心逻辑。无论是电商系统、社交网络还是大数据平台,Java 集合都扮演着不可或缺的角色。 面对 ArrayList、LinkedList、HashMap、ConcurrentHashMap 等众多选择,如何根据场景做出正确决策? 本文将带你深入 Java 集合的核心世界,系统梳理 List、Set、Map、Queue 四大体系,揭示 HashMap 的扩容机制、ArrayList 的动态增长原理,对比不同场景下的性能表现,并探索多线程环境下的最佳实践。
Collection (接口)
├── List (有序、可重复)
│ ├── ArrayList
│ ├── LinkedList
│ ├── Vector
│ └── Stack
├── Set (无序、唯一)
│ ├── HashSet
│ ├── LinkedHashSet
│ └── TreeSet
└── Queue (队列)
├── PriorityQueue
├── ArrayDeque
└── LinkedList
Map (接口)
├── HashMap
├── LinkedHashMap
├── TreeMap
├── Hashtable
└── ConcurrentHashMap
特点:基于动态数组,随机访问快,增删慢。非线程安全。默认初始容量 10,按 1.5 倍扩容。
List<String> list = new ArrayList<>();
list.add("Java");
list.get(0); // O(1)
特点:基于双向链表,增删快,随机访问慢。适用于频繁插入删除的场景。
List<String> list = new LinkedList<>();
list.add("First");
list.addLast("Last"); // 特有方法
特点:线程安全的 ArrayList(使用 synchronized)。性能较慢,已逐渐被淘汰。默认 2 倍扩容。
import java.util.Vector;
public class VectorExample {
public static void main(String[] args) {
Vector<String> vector = new Vector<>();
vector.add("Java");
System.out.println(vector);
}
}
CopyOnWriteArrayList 是 Java 并发包中的线程安全 List 实现。采用'写时复制'策略。
特点:基于 HashMap 实现,无序。添加、删除、查询 O(1)。非线程安全。
Set<String> set = new HashSet<>();
set.add("apple");
特点:保持插入顺序。底层由 LinkedHashMap 实现。
特点:基于红黑树,元素有序。支持自然排序或 Comparator。
特点:数组 + 链表/红黑树,键值对存储。非线程安全。 重要参数:初始容量 16,加载因子 0.75,链表转红黑树阈值 8,红黑树转链表阈值 6。
特点:保持插入顺序或访问顺序。常用于 LRU 缓存实现。
特点:基于红黑树,键有序。
特点:线程安全的 HashMap(分段锁/CAS)。多线程环境首选。
特点:优先级队列(最小堆)。
特点:双端队列,数组实现。
| 非线程安全 | 线程安全替代 |
|---|---|
| ArrayList | CopyOnWriteArrayList |
| HashSet | CopyOnWriteArraySet |
| HashMap | ConcurrentHashMap |
| TreeMap | ConcurrentSkipListMap |
说明: CopyOnWriteArrayList 适合读多写少;ConcurrentHashMap 性能较好;ConcurrentSkipListMap 为跳表实现。
| 集合类 | 获取 | 添加 | 删除 | 内存 |
|---|---|---|---|---|
| ArrayList | O(1) | O(1)~O(n) | O(n) | 低 |
| LinkedList | O(n) | O(1) | O(1) | 高 |
| HashSet | O(1) | O(1) | O(1) | 中 |
| TreeSet | O(log n) | O(log n) | O(log n) | 高 |
| HashMap | O(1) | O(1) | O(1) | 中 |
时间复杂度说明: O(1) 常数时间,O(log n) 对数时间,O(n) 线性时间。
根据具体需求选择合适的集合类,可以显著提升程序性能和可维护性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online