Java基础集合框架之 Collection 接口

Collection 接口是 Java 集合框架(Java Collections Framework, JCF)中最顶层的接口之一(另一个是 Map,但 Map 不继承自 Collection)。它是所有单列集合(如 ListSetQueue 等)的根接口,定义了对集合对象进行基本操作的通用方法。


一、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 是泛型接口,支持类型安全。
  • 不保证线程安全:大多数实现类(如 ArrayListHashSet)都不是线程安全的。若需线程安全,可使用 Collections.synchronizedCollection() 包装,或使用并发集合(如 CopyOnWriteArrayListConcurrentHashMap 等)。
  • 允许 null 元素:大多数实现允许 null(但 TreeSetConcurrentSkipListSet 等有序集合可能不允许)。
  • 不支持直接实例化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]
    }
}

五、注意事项

  1. equals()hashCode()
    Collectionequals() 方法通常基于元素的 equals() 实现(如 List 按顺序比较,Set 忽略顺序)。因此,存储自定义对象时,建议重写 equals()hashCode()

  2. fail-fast 机制
    大多数 Collection 实现(如 ArrayListHashSet)的迭代器是 fail-fast 的,即在遍历过程中如果集合被结构性修改(非迭代器自身修改),会抛出 ConcurrentModificationException

  3. 性能差异
    不同实现类的性能特征不同。例如:

    • ArrayList:随机访问快,插入/删除慢(中间位置)。
    • LinkedList:插入/删除快,随机访问慢。
    • HashSet:查找、插入、删除平均 O(1)。
    • TreeSet:有序,操作 O(log n)。

六、总结

Collection 接口是 Java 集合框架的基石,它抽象了集合的基本行为,使得开发者可以编写通用、灵活的集合操作代码。理解 Collection 及其子接口(ListSetQueue)的特性与适用场景,是掌握 Java 集合框架的关键一步。


🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐