## 任务目标
请审查 Java 集合视图、转换与批量处理代码。
以核查和评审为主,给出有证据的判断及可复核的修改建议;本次用户另有明确实现要求时,按其授权范围执行。
## 输入信息(选填)
两项均可留空,也可直接用一句话说明目标并附上已有资料。无需自行整理版本、配置或完整需求表;能读取的内容由执行者补齐。
集合处理链:
工程与数据样例:
## 信息不完整时
先使用本次对话中已经说明的信息;用户留空、写“暂无/不清楚”或未替换输入标记,都按缺失处理,不当作真实路径、参数或业务值。已能从资料确定的内容不重复询问,不编造文件、日志、接口、业务值或执行结果。在用户已授权的范围内读取相关工程和材料,不为补齐输入擅自扩大操作范围。
### 优先确认
- 追踪原集合、subList 等视图、独立副本与缓存引用的拥有关系。
- 检查数组与列表转换、增删替换、遍历修改和对象加入后再变更的行为。
- 核对去重键、排序、重复项保留及分页计数的实际契约。
- 读取批次边界、全量加载、中间副本及并发共享路径,核对 JDK 与集合库能力。
### 可采用的默认处理
- 默认只读给最小替换建议,不统一改 Stream、并行集合或不可变类型。
- 没有业务去重和顺序定义时保留输入顺序与重复语义,不按对象名称猜业务键。
- 没有规模记录时对持有副本和峰值内存列计算条件,不虚构耗时。
### 必须有依据的事项
- 业务顺序、重复项或缺失关联应如何处理不明时,不选择会改变输出的去重或批量策略。
- 共享集合是否允许实时可见变更及复合操作原子性不明确时,不以换集合类决定并发语义。
只有缺口会改变业务结果、权限边界或关键实现,且无法从现有资料确认时,才集中提出最多 3 个关键问题;说明影响,并继续完成不依赖答案的部分。一般命名、排版和可逆实现细节按现有约定决定,不逐项等待确认。
### 资料仍不足时的交付
- 无工程时交付视图与副本、转换及遍历变更的可运行边界样例和关系说明。
- 无大规模数据时给批次与内存估算模板,列空集合、重复、空元素、源变更和并发验证条件。
## 执行要求
适用范围:使用Java集合的业务模块;不可变集合工厂、Stream及第三方集合的能力需匹配JDK与依赖版本。
核对集合视图与原集合的关联,以及具体集合对遍历修改和数组转换的支持。
检查步骤:
1. 标出每个集合的创建者、拥有者、读写方和生命周期,区分原始数据、分页视图、独立副本和缓存引用;指出在哪一层修改可能影响另外一个业务调用。
2. 用真实调用路径检查分页切片、数组转列表和列表转数组,分别验证能否增加、删除、替换及强制转换;将依赖具体实现的假设改为明确契约。
3. 检查筛选与去重是否保持业务要求的稳定顺序,以及重复记录按哪个业务键识别;若对象在加入集合后继续修改,核对后续查找和结果是否仍正确。
4. 评估批量规模,区分一次全量加载、分批读取和流式处理;估算同时持有的数据副本与中间结果,容量结论注明来源,不根据循环层数臆测实际耗时。
5. 检查并发共享是否存在可见性或写入冲突,说明快照、加锁、分段处理等候选方案各自改变的语义;不要仅更换集合类就宣称业务操作整体原子。
6. 提供覆盖空集合、单元素、重复、空元素、源集合变更及大批量输入的验证用例;并发场景必须定义可重复观察的结果,记录未执行的压力验证。
## 交付与验收
输出要求:交付集合关系说明、缺陷表、最小替换代码和验证矩阵。每处修改说明是否保留原有顺序、重复项和共享语义,另外列出峰值内存估算的假设与需要采集的指标。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。
### 本条完成检查
- 每项缺陷说明创建者、修改者、触发输入和受影响调用。
- 替换建议明确是否保留顺序、重复项、共享关系和批量失败语义。
- 验证包含源集合变更与边界输入,容量和并发结论注明实际执行范围。
按本条要求组织结果,使用简洁中文和一致的编号、术语、缩进及空行;已有项目格式优先。只说明实际完成的内容,将采用的假设、未完成项和缺少的条件写在相关位置,不额外生成无关文档。未执行、无法复现或缺少证据的检查如实标注,不宣称已通过或已有性能收益。
## 参考资料与适用边界
来源(核验日期:2026-09-08):
[阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md)
整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。