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()(不可修改)或新建空实现类(可修改)。

相关推荐
rebekk2 小时前
什么时候会用到python -m
python
Suchadar2 小时前
NAT网络地址转换
linux·服务器·网络
是喵斯特ya2 小时前
python开发web暴力破解工具(进阶篇 包含验证码识别和token的处理)
开发语言·python·web安全
长安牧笛2 小时前
职业技能学习路径规划工具,用户输入目标岗位,如AI工程师,结合现有技能水平,推荐分阶段学习资源(课程/书籍/项目),设置学习进度提醒。
python
长安牧笛2 小时前
智能衣柜—穿搭助手,内置温湿度传感器,潮湿天气启动除湿功能,防止衣服发霉,APP还能记录衣服穿着频率,推荐久没穿的衣服,避免穿搭重复。
python
free-elcmacom2 小时前
机器学习高阶教程<8>分布式训练三大核心策略拆解
人工智能·分布式·python·机器学习
魔镜前的帅比2 小时前
多工具组合执行链详解
python·ai
应用市场3 小时前
基于 C# WinForms 的 Windows 系统监控工具开发实战
windows·单片机·c#
JHC0000003 小时前
dy直播间评论保存插件
java·后端·python·spring cloud·信息可视化