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