在 Java 中,Collection 是所有单列集合的根接口,它定义了一套通用的操作方法,适用于 List 和 Set 等所有单列集合。本文将系统梳理 Collection 的核心知识点,包括体系结构、常用方法及三种遍历方式,帮助你快速掌握集合操作的精髓。
一、Collection 体系结构:两大分支的特性差异
Collection 作为单列集合的顶层接口,主要派生出两大子接口,它们的特性截然不同:
-
List 系列集合
- 特点:元素有序(存储和取出顺序一致)、可重复、有索引
- 常见实现类:
ArrayList、LinkedList、Vector
-
Set 系列集合
- 特点:元素无序(存储和取出顺序可能不同)、不可重复、无索引
- 常见实现类:
HashSet(含LinkedHashSet)、TreeSet
注意:Collection 是接口,不能直接实例化,需通过多态创建其实现类对象(如
Collection<String> coll = new ArrayList<>())。
二、Collection 核心方法:通用操作详解
Collection 定义了所有单列集合的共性方法,以下是常用方法及细节说明:
| 方法 | 功能 | 关键细节 |
|---|---|---|
add(E e) | 添加元素到集合 | List 始终返回true(可重复);Set 存在元素时返回false(不可重复) |
clear() | 清空集合所有元素 | 无返回值,执行后集合为空 |
remove(E e) | 删除指定元素 | 存在元素返回true,否则返回false;通过元素值删除(非索引) |
contains(E e) | 判断元素是否存在 | 需对象重写equals()方法(否则比较地址) |
isEmpty() | 判断集合是否为空 | 元素数量为 0 时返回true |
size() | 获取元素个数 | 返回 int 类型的集合长度 |
示例代码:
Collection<String> coll = new ArrayList<>();
coll.add("hello"); // 添加元素
coll.add("rabbit");
System.out.println(coll); // [hello, rabbit]
coll.remove("rabbit"); // 删除元素
System.out.println(coll.contains("hello")); // true(判断存在)
System.out.println(coll.size()); // 1(获取长度)
coll.clear(); // 清空集合
System.out.println(coll.isEmpty()); // true(判断为空)
三、Collection 遍历方式:三种方法对比
遍历集合是日常开发的高频操作,Collection 提供了三种常用遍历方式,各有适用场景:
1. 迭代器(Iterator):集合专用遍历工具
迭代器是 Collection 最基础的遍历方式,通过iterator()方法获取迭代器对象,配合hasNext()和next()实现遍历:
Iterator<String> it = coll.iterator();
while (it.hasNext()) { // 判断当前位置是否有元素
String str = it.next(); // 获取元素并移动指针
System.out.print(str + " ");
}
注意事项:
- 遍历结束后,指针不会自动复位,需重新获取迭代器才能再次遍历
- 不可在遍历中使用集合的
add/remove方法(可使用迭代器的remove()) - 多次调用
next()会跳过元素,可能导致NoSuchElementException
2. 增强 for 循环:简化迭代器的语法糖
JDK5 引入的增强 for 循环,底层基于迭代器实现,语法更简洁,适用于遍历集合或数组:
for (String s : coll) { // s为集合元素的临时变量
System.out.print(s + " ");
}
特点:
- 无需手动获取迭代器,自动完成遍历
- 临时变量
s是元素的副本,修改s不会影响集合原数据 - 仅适用于遍历,不能在循环中修改集合结构(如添加 / 删除元素)
3. Lambda 表达式:JDK8 + 的优雅遍历
JDK8 开始,Collection 新增forEach()方法,结合 Lambda 表达式可实现极简遍历:
// 匿名内部类形式
coll.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.print(s + " ");
}
});
// Lambda简化形式
coll.forEach(s -> System.out.print(s + " "));
优势:
- 代码最简洁,聚焦遍历逻辑
- 无需关注迭代器细节,由 JDK 自动处理
- 体现函数式编程思想,适合简单遍历场景
四、总结:选择合适的方式操作集合
Collection 作为单列集合的基础,其方法和遍历方式适用于所有子接口实现类。掌握这些知识后,使用 List 或 Set 时就能举一反三:
- 操作集合元素:优先使用
add()、remove()、size()等通用方法,注意 List 和 Set 的特性差异 - 遍历集合:简单场景用 Lambda 表达式,需要复杂逻辑(如删除元素)用迭代器,普通遍历可用增强 for 循环
255

被折叠的 条评论
为什么被折叠?



