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