一、Collection 是什么?
Collection 是 Java 集合框架的根接口 (位于 java.util 包下),它定义了一组用于操作 "一组对象"(元素)的通用方法,是所有单列集合(区别于 Map 这种键值对集合)的基础。
你可以把 Collection 理解为一个 "容器" 的通用规则:比如怎么添加元素、删除元素、判断是否包含某个元素等,而具体的容器(如列表、集合、队列)会遵循这个规则,并实现自己的特性。
二、Collection 的核心方法(通用规则)
这些方法是所有实现了 Collection 接口的类都具备的,常用的有:
| 方法 | 作用 |
|---|---|
boolean add(E e) |
向集合中添加一个元素 |
boolean remove(Object o) |
从集合中移除指定元素 |
boolean contains(Object o) |
判断集合是否包含指定元素 |
int size() |
返回集合中元素的个数 |
void clear() |
清空集合中所有元素 |
boolean isEmpty() |
判断集合是否为空 |
Iterator<E> iterator() |
获取遍历集合的迭代器 |
Object[] toArray() |
将集合转为数组 |
三、Collection 的主要子接口(常用实现类)
Collection 本身是接口,不能直接实例化,实际开发中我们使用的是它的子接口和实现类,核心子接口有 3 个:
1. List(有序、可重复)
- 特点:元素有序 (插入顺序 = 遍历顺序)、可重复,支持通过索引访问元素。
- 常用实现类:
ArrayList:底层是数组,查询快、增删慢,线程不安全(日常开发最常用)。LinkedList:底层是双向链表,查询慢、增删快,线程不安全。Vector:底层是数组,线程安全,但效率低(基本被淘汰)。
2. Set(无序、不可重复)
- 特点:元素无序 (无索引)、不可重复 (依赖
equals()和hashCode()保证)。 - 常用实现类:
HashSet:底层是哈希表,存取快,无序,不可重复。LinkedHashSet:继承HashSet,底层加了链表,保证元素有序(插入顺序)。TreeSet:底层是红黑树,元素会自动排序(需实现Comparable或传入Comparator)。
3. Queue(队列,先进先出)
- 特点:遵循 "先进先出(FIFO)" 原则,常用于任务排队、消息处理等场景。
- 常用实现类:
LinkedList:同时实现了List和Queue,可作为队列使用。PriorityQueue:优先级队列,元素按优先级排序(而非插入顺序)。
四、Collection 的基本使用示例
下面是一个简单的示例,展示 Collection 核心方法的使用(以 ArrayList 为例):
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
// 1. 创建 Collection 实现类对象(ArrayList)
Collection<String> collection = new ArrayList<>();
// 2. 添加元素
collection.add("Java");
collection.add("Python");
collection.add("C++");
System.out.println("添加元素后:" + collection); // 输出:[Java, Python, C++]
// 3. 判断元素是否存在
boolean hasJava = collection.contains("Java");
System.out.println("是否包含 Java:" + hasJava); // 输出:true
// 4. 获取元素个数
int size = collection.size();
System.out.println("集合大小:" + size); // 输出:3
// 5. 遍历集合(方式1:迭代器)
Iterator<String> iterator = collection.iterator();
System.out.print("迭代器遍历:");
while (iterator.hasNext()) {
String element = iterator.next();
System.out.print(element + " "); // 输出:Java Python C++
}
System.out.println();
// 6. 移除元素
collection.remove("C++");
System.out.println("移除 C++ 后:" + collection); // 输出:[Java, Python]
// 7. 判断是否为空
boolean isEmpty = collection.isEmpty();
System.out.println("集合是否为空:" + isEmpty); // 输出:false
// 8. 清空集合
collection.clear();
System.out.println("清空后:" + collection); // 输出:[]
}
}
五、关键注意点
Collection是泛型接口 ,使用时建议指定元素类型(如Collection<String>),避免类型转换异常。Set保证元素唯一的原理:添加元素时,先调用hashCode()计算哈希值,再调用equals()比较,两者都相同则视为重复元素,无法添加。- 遍历
Collection的方式:除了迭代器,还可以用增强 for 循环(for (String s : collection))或 Java 8+ 的流式遍历(collection.forEach(System.out::println))。
总结
Collection是 Java 单列集合的根接口,定义了操作元素的通用方法,不能直接实例化。- 核心子接口:
List(有序可重复)、Set(无序不可重复)、Queue(先进先出),各有不同的实现类适配不同场景。 - 常用操作:添加(
add)、删除(remove)、遍历(迭代器 / 增强 for)是Collection最核心的使用场景,不同实现类仅在性能、有序性、唯一性上有差异。
