理解 Collection 接口在 Java 集合框架中的核心地位
掌握 Collection 接口提供的通用操作方法及其语义
了解其主要子接口(List、Set、Queue 等)的特性与适用场景
能够正确创建和使用 Collection 类型的引用
熟练进行元素的添加、删除、遍历等基本操作
Collection 是 Java 集合框架的根接口,定义在 java.util 包中。它代表一组对象(称为“元素”),并将它们视为一个逻辑单元。
动态大小:集合可自动扩容或缩容,不像数组有固定长度
类型灵活:可存储同类型(泛型约束)或不同类型(原始类型)的对象
操作便捷:提供 add()、remove()、clear() 等统一 API
支持遍历:实现 Iterable<E> 接口,可用 for-each 循环或 Iterator
public interface Collection<E> extends Iterable<E>其中 E 表示集合中元素的类型(泛型参数)。
注意:不能直接实例化接口。必须通过其实现类(如
ArrayList)创建对象,并用Collection引用指向它。
// 正确方式:使用实现类创建,接口引用
Collection<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
System.out.println(fruits); // [Apple, Banana]这种“面向接口编程”的方式提高了代码的灵活性和可维护性。
Collection 接口派生出多个重要子接口,形成完整的集合分类:

add(E e):添加单个元素
addAll(Collection<? extends E> c):批量添加
Collection<Integer> nums = new ArrayList<>();
nums.add(10);
nums.add(20);
Collection<Integer> more = List.of(30, 40);
nums.addAll(more); // [10, 20, 30, 40]remove(Object o):移除第一个匹配的元素
removeAll(Collection<?> c):移除所有出现在给定集合中的元素
retainAll(Collection<?> c):仅保留出现在给定集合中的元素(求交集)
removeIf(Predicate<E> filter):按条件删除(Java 8+)
Collection<String> fruits = new ArrayList<>(List.of("Apple", "Banana", "Mango"));
fruits.remove("Mango"); // [Apple, Banana]
fruits.removeAll(Set.of("Apple", "Banana")); // []contains(Object o):是否包含某元素
containsAll(Collection<?> c):是否包含另一个集合的所有元素
isEmpty():是否为空
size():元素数量
if (fruits.contains("Apple")) {
System.out.println("We have apples!");
}虽然 Collection 本身不支持索引访问,但可通过以下方式遍历:
Iterator<String> it = fruits.iterator();
while (it.hasNext()) {
String fruit = it.next();
System.out.print(fruit + " ");
}for (String fruit : fruits) {
System.out.print(fruit + " ");
}fruits.stream().forEach(System.out::println);注意:若需索引访问,应使用
List接口及其实现类(如ArrayList),调用get(int index)方法。
toArray():转为对象数组
stream() / parallelStream():创建流用于函数式处理
clear():清空所有元素
equals() / hashCode():用于比较和哈希存储
Object[] arr = fruits.toArray();
String[] strArr = fruits.toArray(new String[0]); // 类型安全转换注:部分方法(如
add、remove)在某些不可变集合中会抛出UnsupportedOperationException
Collection 是 Java 集合框架的顶层接口,定义了通用集合操作
它有三大核心子接口:List(有序可重复)、Set(无序唯一)、Queue(FIFO)
通过实现类(如 ArrayList、HashSet)创建对象,用接口引用操作
提供统一的增删查改、遍历、转换等方法,简化集合处理
面向接口编程 + 合理选择子类型 = 高效、可维护的集合代码
为什么 Collection 接口没有提供 get(int index) 方法?这体现了怎样的设计思想?
如果你有一个 Collection<String> 引用,但实际对象是 HashSet,调用 add("A") 两次会发生什么?为什么?
在多线程环境下直接使用 ArrayList 作为 Collection 的实现是否安全?如果不安全,有哪些替代方案?