文章目录
- 一、Java集合框架概览
- 二、核心集合类详解
- 1. List接口(有序、可重复)
- **ArrayList**
- **LinkedList**
- **List对比表**
- 2. Set接口(无序、唯一)
- **HashSet**
- **TreeSet**
- **Set对比表**
- 3. Queue接口(队列)
-
- 4. Map接口(键值对)
- **HashMap**
- **LinkedHashMap**
- **Map对比表**
- 三、工具类与线程安全
- 1. **Collections工具类**
- 2. **线程安全集合**
- 四、最佳实践与使用场景
- 1. **常见场景推荐**
- 2. **注意事项总结**
- 五、Java 8+ 增强
-
- 六、总结
一、Java集合框架概览
Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作数据集合的核心工具,主要分为两大接口:
- Collection:存储单一元素(List、Set、Queue)
- Map:存储键值对(HashMap、TreeMap)
二、核心集合类详解
1. List接口(有序、可重复)
ArrayList
- 初始化:
List<String> list = new ArrayList<>();
List<String> list2 = new ArrayList<>(20);
- 排序:
Collections.sort(list);
Collections.sort(list, (a, b) -> b.compareTo(a));
- 长度:
list.size() - 判空:
list.isEmpty() - 使用场景:频繁随机访问(
get/set),数据量较小。 - 注意事项:
- 线程不安全,多线程环境需同步。
- 扩容机制(默认扩容1.5倍),频繁插入需预分配容量。
LinkedList
List对比表
| 特性 | ArrayList | LinkedList |
|---|
| 底层结构 | 动态数组 | 双向链表 |
| 随机访问速度 | O(1) | O(n) |
| 头部插入/删除速度 | O(n) | O(1) |
| 内存占用 | 较低(无指针) | 较高(存储指针) |
2. Set接口(无序、唯一)
HashSet
TreeSet
Set对比表
| 特性 | HashSet | TreeSet |
|---|
| 底层结构 | 哈希表 | 红黑树 |
| 元素顺序 | 无序 | 自然/自定义排序 |
| 时间复杂度(增删查) | O(1) 平均 | O(log n) |
3. Queue接口(队列)
PriorityQueue
4. Map接口(键值对)
HashMap
- 初始化:
Map<String, Integer> map = new HashMap<>(20, 0.8f);
- 排序:
TreeMap<String, Integer> sortedMap = new TreeMap<>(map);
- 使用场景:快速键值存取、缓存实现。
- 注意事项:键对象需正确实现
hashCode()和equals()。
LinkedHashMap
- 使用场景:保留插入顺序或实现LRU缓存。
Map<String, Integer> lruCache = new LinkedHashMap<>(16, 0.75f, true) {@Overrideprotected boolean removeEldestEntry(Map.Entry eldest) {return size() > 100; }
};
Map对比表
| 特性 | HashMap | TreeMap | LinkedHashMap |
|---|
| 底层结构 | 哈希表 | 红黑树 | 哈希表+链表 |
| 顺序 | 无序 | 按键排序 | 插入/访问顺序 |
| 时间复杂度(增删查) | O(1) 平均 | O(log n) | O(1) 平均 |
三、工具类与线程安全
1. Collections工具类
2. 线程安全集合
| 场景 | 非线程安全类 | 线程安全替代方案 |
|---|
| 高并发List | ArrayList | CopyOnWriteArrayList |
| 高并发Map | HashMap | ConcurrentHashMap |
| 高并发Queue | PriorityQueue | PriorityBlockingQueue |
四、最佳实践与使用场景
1. 常见场景推荐
| 需求 | 推荐集合 | 理由 |
|---|
| 快速查询元素 | ArrayList / HashMap | 随机访问时间复杂度O(1) |
| 频繁插入删除(头尾) | LinkedList | 链表操作时间复杂度O(1) |
| 数据去重 | HashSet | 哈希表去重效率高 |
| 需要自然排序 | TreeSet / TreeMap | 红黑树自动维护有序性 |
| 实现LRU缓存 | LinkedHashMap | 通过accessOrder和removeEldestEntry |
| 高并发环境 | ConcurrentHashMap | 分段锁保证线程安全 |
2. 注意事项总结
- 线程安全:默认集合类非线程安全,多线程环境需显式同步。
- 初始容量:预估数据量,避免频繁扩容(如
ArrayList默认扩容1.5倍)。 - 对象一致性:
HashSet/HashMap的键对象不可变,避免哈希值变化。 - 迭代器安全:遍历时修改集合可能引发
ConcurrentModificationException。
五、Java 8+ 增强
Stream API操作集合
List<String> filteredList = list.stream().filter(s -> s.startsWith("A")).map(String::toUpperCase).collect(Collectors.toList());
六、总结
Java集合框架提供了丰富的工具类,开发者应根据具体需求选择合适的集合类型:
- 查询多 →
ArrayList / HashMap - 增删多 →
LinkedList / LinkedHashMap - 排序需求 →
TreeSet / TreeMap - 线程安全 →
ConcurrentHashMap / CopyOnWriteArrayList
正确使用集合框架能显著提升代码性能和可维护性。建议结合场景需求,合理选择初始容量、排序方式及线程安全策略。