Java基础:集合框架之 Collection 接口
Java集合框架中的Collection接口是单列集合的根接口,定义了基本操作方法。它包含三个主要子接口:List(有序可重复)、Set(无序不可重复)和Queue(队列)。Collection接口提供了添加、删除、查找等基本操作,以及批量操作和遍历方法。大多数实现类非线程安全,允许null元素。使用时需注意equals()和hashCode()重写、fail-fast机制及不同实现类的性能差异。
Java基础集合框架之 Collection 接口
Collection 接口是 Java 集合框架(Java Collections Framework, JCF)中最顶层的接口之一(另一个是 Map,但 Map 不继承自 Collection)。它是所有单列集合(如 List、Set、Queue 等)的根接口,定义了对集合对象进行基本操作的通用方法。
一、Collection 接口的继承体系
Collection<E>
├── List<E> // 有序、可重复
│ ├── ArrayList
│ ├── LinkedList
│ └── Vector
├── Set<E> // 无序、不可重复
│ ├── HashSet
│ ├── LinkedHashSet
│ └── TreeSet
└── Queue<E> // 队列,通常先进先出(FIFO)
├── LinkedList
├── PriorityQueue
└── Deque<E>(双端队列)
├── ArrayDeque
└── LinkedList
注意:
Map接口不属于Collection体系。
二、Collection 接口的核心方法
Collection 接口定义了以下几类常用方法:
1. 基本操作(单元素操作)
| 方法 | 说明 |
|---|---|
boolean add(E e) |
添加元素,成功返回 true |
boolean remove(Object o) |
删除指定元素(首次出现),成功返回 true |
boolean contains(Object o) |
判断是否包含指定元素 |
boolean isEmpty() |
判断集合是否为空 |
int size() |
返回集合中元素个数 |
2. 批量操作
| 方法 | 说明 |
|---|---|
boolean addAll(Collection<? extends E> c) |
添加另一个集合的所有元素 |
boolean removeAll(Collection<?> c) |
删除与指定集合中相同的元素 |
boolean retainAll(Collection<?> c) |
保留与指定集合中相同的元素(求交集) |
void clear() |
清空集合 |
3. 遍历操作
| 方法 | 说明 |
|---|---|
Iterator<E> iterator() |
返回迭代器,用于遍历集合 |
Object[] toArray() |
转换为对象数组 |
<T> T[] toArray(T[] a) |
转换为指定类型的数组 |
4. 其他方法(Java 8+ 新增)
| 方法 | 说明 |
|---|---|
default boolean removeIf(Predicate<? super E> filter) |
根据条件删除元素 |
default Stream<E> stream() |
返回顺序流 |
default Stream<E> parallelStream() |
返回并行流 |
default void forEach(Consumer<? super E> action) |
对每个元素执行操作 |
三、Collection 接口的特点
- 泛型支持:从 Java 5 开始,
Collection是泛型接口,支持类型安全。 - 不保证线程安全:大多数实现类(如
ArrayList、HashSet)都不是线程安全的。若需线程安全,可使用Collections.synchronizedCollection()包装,或使用并发集合(如CopyOnWriteArrayList、ConcurrentHashMap等)。 - 允许 null 元素:大多数实现允许
null(但TreeSet、ConcurrentSkipListSet等有序集合可能不允许)。 - 不支持直接实例化:
Collection是接口,不能直接new Collection()。
四、示例代码
import java.util.*;
public class CollectionDemo {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
// 添加元素
collection.add("Java");
collection.add("Python");
collection.add("C++");
// 判断是否包含
System.out.println(collection.contains("Java")); // true
// 遍历(使用 forEach,Java 8+)
collection.forEach(System.out::println);
// 转数组
String[] arr = collection.toArray(new String[0]);
System.out.println(Arrays.toString(arr));
// 条件删除(Java 8+)
collection.removeIf(s -> s.startsWith("C"));
System.out.println(collection); // [Java, Python]
}
}
五、注意事项
-
equals()和hashCode():Collection的equals()方法通常基于元素的equals()实现(如List按顺序比较,Set忽略顺序)。因此,存储自定义对象时,建议重写equals()和hashCode()。 -
fail-fast 机制:
大多数Collection实现(如ArrayList、HashSet)的迭代器是 fail-fast 的,即在遍历过程中如果集合被结构性修改(非迭代器自身修改),会抛出ConcurrentModificationException。 -
性能差异:
不同实现类的性能特征不同。例如:ArrayList:随机访问快,插入/删除慢(中间位置)。LinkedList:插入/删除快,随机访问慢。HashSet:查找、插入、删除平均 O(1)。TreeSet:有序,操作 O(log n)。
六、总结
Collection 接口是 Java 集合框架的基石,它抽象了集合的基本行为,使得开发者可以编写通用、灵活的集合操作代码。理解 Collection 及其子接口(List、Set、Queue)的特性与适用场景,是掌握 Java 集合框架的关键一步。
🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨
更多推荐


所有评论(0)