作为一名 Java 开发工程师 ,你一定在开发过程中频繁使用过 List
、Set
、Queue
等集合类。它们都继承自 Java 集合框架的核心接口 ------ Collection
。
本文将带你全面掌握:
- Java 集合框架的整体结构
Collection
接口的定义与核心方法List
、Set
、Queue
的区别与使用场景Collection
的遍历方式(Iterator、增强 for、Stream)- 常见实现类(如
ArrayList
、HashSet
、LinkedList
等) - 集合操作的最佳实践与注意事项
并通过丰富的代码示例和真实业务场景讲解,帮助你写出更高效、结构更清晰的 Java 集合代码。
🧱 一、Java 集合框架概述
Java 集合框架(Java Collections Framework)是 Java 提供的一套用于存储和操作对象集合的类和接口。其核心接口包括:
Collection
├── List // 有序、可重复
├── Set // 无序、不可重复
└── Queue // 队列结构
Map
🌟
Collection
是List
、Set
、Queue
的父接口,代表一组对象的集合。
🔍 二、Collection
接口核心方法详解
方法 | 描述 |
---|---|
boolean add(E e) |
添加元素 |
boolean remove(Object o) |
移除指定元素 |
boolean contains(Object o) |
是否包含某个元素 |
int size() |
返回集合大小 |
boolean isEmpty() |
是否为空 |
void clear() |
清空集合 |
Iterator<E> iterator() |
获取迭代器 |
Object[] toArray() |
转换为数组 |
boolean containsAll(Collection<?> c) |
是否包含另一个集合中的所有元素 |
boolean addAll(Collection<? extends E> c) |
添加另一个集合中的所有元素 |
boolean removeAll(Collection<?> c) |
移除另一个集合中的所有元素 |
boolean retainAll(Collection<?> c) |
保留与另一个集合相同的元素 |
🧠 三、Collection
的主要子接口与实现类
1. List
(有序、可重复)
-
实现类:
ArrayList
、LinkedList
、Vector
-
特点:元素有序、可重复、可通过索引访问
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Java"); // 允许重复
2. Set
(无序、不可重复)
-
实现类:
HashSet
、TreeSet
、LinkedHashSet
-
特点:元素唯一、不保证顺序(
LinkedHashSet
保证插入顺序)Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 不会重复添加
3. Queue
(队列结构)
-
实现类:
LinkedList
、PriorityQueue
-
特点:先进先出(FIFO),常用于任务调度、缓冲处理
Queue<String> queue = new LinkedList<>();
queue.offer("Task1");
queue.offer("Task2");
System.out.println(queue.poll()); // Task1
🔁 四、Collection
的遍历方式对比
遍历方式 | 示例 | 特点 |
---|---|---|
普通 for 循环 | for (int i = 0; i < list.size(); i++) |
适用于 List |
增强 for 循环 | for (String s : list) |
简洁,适用于所有 Collection |
Iterator 迭代器 | Iterator<String> it = list.iterator(); while (it.hasNext()) |
支持在遍历时删除元素 |
Stream 流式处理 | list.stream().forEach(System.out::println) |
函数式编程,支持过滤、映射等操作 |
🧪 五、Collection
的实际应用场景
场景1:去重处理(使用 Set
)
List<String> duplicates = Arrays.asList("a", "b", "a", "c");
Set<String> unique = new HashSet<>(duplicates);
场景2:任务调度(使用 Queue
)
Queue<String> tasks = new LinkedList<>();
tasks.offer("Download");
tasks.offer("Parse");
while (!tasks.isEmpty()) {
String task = tasks.poll();
System.out.println("Processing: " + task);
}
场景3:数据聚合与处理(使用 Stream)
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> even = numbers.stream()
.filter(n -> n % 2 == 0)
.toList();
场景4:集合交集、并集、差集操作
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(2, 3, 4));
Set<Integer> union = new HashSet<>(set1);
union.addAll(set2); // 并集
Set<Integer> intersection = new HashSet<>(set1);
intersection.retainAll(set2); // 交集
Set<Integer> difference = new HashSet<>(set1);
difference.removeAll(set2); // 差集
🚫 六、常见误区与注意事项
误区 | 正确做法 |
---|---|
在遍历时直接删除元素 | 使用 Iterator.remove() |
直接使用 == 比较集合内容 |
使用 equals() 或 containsAll() |
忘记处理 null 元素 | Set 中最多允许一个 null,List 可以有多个 |
不区分 Collection 和 Map |
Map 是键值对结构,不属于 Collection |
忽略线程安全问题 | 多线程使用 Collections.synchronizedList() 或 CopyOnWriteArrayList |
忘记关闭迭代器 | Iterator 不需要关闭,但某些流式资源(如 IO)需要关闭 |
🧱 七、Collection
与 Map
的关系
对比项 | Collection |
Map |
---|---|---|
存储结构 | 单一元素集合 | 键值对集合 |
主要子接口 | List、Set、Queue | 无 |
常用实现类 | ArrayList、HashSet、LinkedList | HashMap、TreeMap、LinkedHashMap |
是否支持索引 | List 支持 |
不支持 |
是否支持键重复 | 不支持(Set) | 键不能重复 |
是否支持值重复 | 支持(List) | 值可以重复 |
📊 八、总结:Java Collection
核心知识点一览表
内容 | 说明 |
---|---|
接口结构 | Collection 是 List 、Set 、Queue 的父接口 |
常用方法 | add、remove、contains、size、iterator、stream |
遍历方式 | 普通 for、增强 for、Iterator、Stream |
主要实现类 | ArrayList、HashSet、LinkedList、PriorityQueue |
应用场景 | 数据存储、去重、队列任务处理、集合运算 |
注意事项 | 遍历中删除使用 Iterator、线程安全、null 处理 |
性能优化 | 根据场景选择合适的集合类型(如随机访问用 ArrayList) |
📎 九、附录:Collection
常用技巧速查表
技巧 | 示例 |
---|---|
创建只读集合 | Collections.unmodifiableList(list) |
同步集合 | Collections.synchronizedList(new ArrayList<>()) |
集合转数组 | list.toArray(new String[0]) |
判断集合是否为空 | CollectionUtils.isEmpty(collection) (Apache Commons Collections) |
集合排序 | Collections.sort(list) |
集合反转 | Collections.reverse(list) |
集合洗牌 | Collections.shuffle(list) |
获取最大最小值 | Collections.max(list) / Collections.min(list) |
集合交集 | set1.retainAll(set2) |
集合并集 | set1.addAll(set2) |
如果你正在准备一篇面向初学者的技术博客,或者希望系统回顾 Java 基础知识,这篇文章将为你提供完整的知识体系和实用的编程技巧。
欢迎点赞、收藏、转发,也欢迎留言交流你在实际项目中遇到的 Collection
集合相关问题。我们下期再见 👋
📌 关注我,获取更多Java核心技术深度解析!