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

相关推荐
广州灵眸科技有限公司5 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大模型码小白6 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧7 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
HLC++8 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室9 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
C^h10 小时前
python函数学习
人工智能·python·机器学习
Fanta丶10 小时前
4.Python set()集合、dict(字典、映射)、 数据容器的通用功能
python
决战灬11 小时前
langgraph之interrupt(理论篇)
人工智能·python·agent
兜客互动11 小时前
2026年AI关键词拓展挖掘软件,高效助力内容创作精准获流
人工智能·python
weixin_5386019711 小时前
智能体测开Day30pytest测试框架
python