Collection接口

一、定义

Collection 是 Java 单列集合的顶层接口(位于 java.util 包),定义所有单列集合的通用操作规范,用于存储多个独立元素,是 List、Set 等核心子接口的父接口,无法直接实例化,需通过其子类/实现类使用。

二、特性

  1. 单列存储:仅存储独立对象,区别于 Map 的键值对存储结构;

  2. 动态扩容:容量随元素增减自动调整,无需手动维护长度;

  3. 泛型支持:指定元素类型,避免类型转换异常,提升代码安全性;

  4. 通用操作封装:统一定义增、删、查、遍历等基础方法,子类可继承或重写;

  5. 非线程安全:默认实现类均为非线程安全,多线程并发修改可能抛出 ConcurrentModificationException;

  6. 可空性:支持存储 null 元素(具体是否允许,取决于子接口/实现类的规则)。

三、方法(通用必掌握)

  1. 元素添加

• boolean add(E e):添加单个元素,成功返回 true(Set 重复添加返回 false);

• boolean addAll(Collection< extends E> c):添加另一个 Collection 的所有元素,成功返回 true。

  1. 元素删除

• boolean remove(Object o):删除首个匹配的元素,成功返回 true;

• boolean removeAll(Collection<> c):删除两个集合的交集元素,成功返回 true;

• boolean retainAll(Collection<> c):保留两个集合的交集元素(删除非交集元素),成功返回 true;

• void clear():清空集合中所有元素,集合变为空。

  1. 元素查询与判断

• int size():返回集合中元素的个数;

• boolean isEmpty():判断集合是否为空(元素个数为 0 返回 true);

• boolean contains(Object o):判断集合是否包含指定元素;

• boolean containsAll(Collection<?> c):判断集合是否包含另一个 Collection 的所有元素。

  1. 集合遍历

• Iterator<E> iterator():返回迭代器对象,用于遍历元素;

• void forEach(Consumer<? super E> action):JDK8+ 新增,Lambda 表达式遍历(简洁高效);

• Spliterator<E> spliterator():JDK8+ 新增,支持并行遍历的分割迭代器。

  1. 集合转换

• Object[] toArray():将集合转为 Object 类型数组;

• <T> T[] toArray(T[] a):转为指定类型数组(推荐,避免后续类型转换)。

四、核心子接口(核心分支)

Collection 仅定义规范,核心能力由子接口实现,两大核心分支:

  1. List 接口:有序、可重复、支持索引,可精确控制元素位置(实现类:ArrayList、LinkedList 等);

  2. Set 接口:无序、不可重复、无索引,自动去重(实现类:HashSet、TreeSet 等);

  3. 扩展子接口(了解):

◦ Queue:队列接口,先进先出(FIFO),实现类:LinkedList、PriorityQueue;

◦ Deque:双端队列接口,首尾均可增删,实现类:LinkedList、ArrayDeque;

◦ SortedSet:有序 Set 接口,元素按规则排序,实现类:TreeSet。

五、线程安全解决方案

Collection 及其默认实现类均非线程安全,多线程并发场景解决方案:

  1. 工具类包装:Collections.synchronizedCollection(Collection<T> c),底层加锁,简单但效率低;

  2. JUC 并发集合:使用 java.util.concurrent 包下的实现类(如 CopyOnWriteArrayList、ConcurrentLinkedQueue),读写分离,效率更高。

六、注意事项

  1. contains/remove 方法:依赖元素的 equals() 方法(无重写则用 Object 类的地址比较,可能不符合预期);

  2. 泛型规范:定义时指定泛型(如 Collection<String>),避免用 Collection<Object> 导致类型转换错误;

  3. toArray 方法:无参方法返回 Object 数组,强转可能报错,优先用带参指定类型的重载方法;

  4. 空集合处理:避免直接使用 null 表示空集合,可使用 Collections.emptyList()/Collections.emptySet()(不可修改)或新建空实现类(可修改)。

相关推荐
张登杰踩6 分钟前
VIA标注格式转Labelme标注格式
python
晚风吹人醒.13 分钟前
SSH远程管理及访问控制
linux·运维·ssh·scp·xshell·访问控制·远程管理
Learner26 分钟前
Python数据类型(四):字典
python
odoo中国1 小时前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按
Jelena157795857921 小时前
Java爬虫api接口测试
python
Uncertainty!!1 小时前
Linux多用户情况下个别用户输入密码后黑屏
linux·远程连接
necessary6532 小时前
使用Clion查看linux环境中的PG源码
linux·运维·服务器
踩坑记录2 小时前
leetcode hot100 3.无重复字符的最长子串 medium 滑动窗口(双指针)
python·leetcode
小猪佩奇TONY3 小时前
Linux 内核学习(14) --- linux x86-32 虚拟地址空间
linux·学习
Lam㊣3 小时前
Centos 7 系统docker:更换镜像源
linux·docker·centos