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

相关推荐
摸鱼的老谭2 分钟前
Java学习之旅第一季-25:一维数组
java·开发语言·数组
山猪打不过家猪9 分钟前
(一)算法
java·开发语言·算法
czliutz22 分钟前
R语言绘制股票K线图及布林线
开发语言·r语言
Momentary_SixthSense32 分钟前
如何对较长的Stream链进行Debug
android·java·开发语言
JAVA学习通35 分钟前
微服务项目->在线oj系统(Java-Spring)--竞赛管理
java·sql·spring
鄃鳕36 分钟前
C++坑系列,C++ std::atomic 拷贝构造函数问题分析与解决方案
java·javascript·c++
木易小熙1 小时前
Guava Cache
java·spring·guava
励志不掉头发的内向程序员1 小时前
【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念
linux·运维·服务器·开发语言·学习
JIngJaneIL1 小时前
图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·图书馆自习室
njxiejing1 小时前
C语言中的scanf函数(头文件、格式控制、取地址符号分析)
c语言·开发语言