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

相关推荐
ShineWinsu12 分钟前
对于Coze—AI:SDK的解析
人工智能·python·ai·sdk·项目·coze·字节跳动
右耳朵猫AI33 分钟前
Python周刊2026W38 | 标准流编码修复、PEP 845/846 草案、解析器提速 10%、集合字典二次复杂度
python·ai·数据科学
zx_7414848134 分钟前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
微软技术分享37 分钟前
大模型网络结构:模型接口测试用例参考
python
Zenova EdgeOS1 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿1 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
Bruce_Liuxiaowei2 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
做运维的阿瑞2 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
why-geo2 小时前
Hermes Agent 与 Python 的会产生什么样的碰撞
人工智能·python·ai编程
正经教主2 小时前
【FDE系列】阶段2:Day 29:FastAPI 进阶 — Pydantic 模型与完整 CRUD 实战
人工智能·python·fde