ArrayList的subList的数据仍是集合

ArrayList的subList结果不可强转成ArrayList,否则会抛出 ClassCastException异常 •

级别: 【CRITICAL】 •

规约类型:BUG •

最坏影响: 程序错误,抛出异常

说明:subList 返回的是ArrayList的内部类SubList,并不是 ArrayList而是ArrayList的一个视图,一个片段,对于SubList子列表 的所有操作最终会反映到原列表上。

如果要避免应用,可以重建一个对 象

List subList = new ArrayList<>(list.subList(1, 4));

反例:List test = (ArrayList) list.subList(0, 1);

在subList场景中,高度注意对原列表的修改,会导致子列表的遍历、增 加、删除均产生ConcurrentModificationException异常

• 级别: 【CRITICAL】

• 规约类型:BUG

• 最坏影响: 程序错误,抛出异常

• 说明: ArrayList 创建SubList时,会把modCount传给子列表 subList。ArrayList增加或者删除时会修改modCount, 而子列表遍 历时会判断subList的modCount和ArrayList的modCount,不一 致就会抛出ConcurrentModificationException

反例:

List originList = new ArrayList(); originList.add("22");

List subList = originList.subList(0, 1);

originList.add("22"); //warn

subList.add("33"); //ConcurrentModificationException

相关推荐
风槐啊3 分钟前
邪修实战系列(3)
java·ide·spring boot·spring·tomcat
咋吃都不胖lyh6 分钟前
SQL数据分析原代码--创建表与简单查询
java·数据库·sql
毕设源码-朱学姐9 分钟前
【开题答辩全过程】以 _基于SpringBoot技术的“树洞”心理咨询服务平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
boonya16 分钟前
Java内存模型与线程私有共享区域与直接内存的理解
java·开发语言·内存模型
qq_1728055917 分钟前
Go 语言 PDF 生成库综合比较与实践指南
开发语言·golang·pdf
axban28 分钟前
QT M/V架构开发实战:QAbstractItemModel介绍
java·数据库·qt
UrSpecial40 分钟前
Linux线程同步与互斥
linux·开发语言·c++
哈喽姥爷1 小时前
Spring Boot--yml配置信息书写和获取
java·数据库·spring boot·mybatis
LeaderSheepH1 小时前
Java自定义比较器详解
java·开发语言
七夜zippoe1 小时前
缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(二)
java·开发语言·缓存