ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException 异常,即 java.util.RandomAccessSubList cannot be cast to java.util.ArrayList.
说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList ,而是 ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。
在 subList 场景中,高度注意对原集合元素个数的修改,会导致子列表的遍历、增加、 删除均会产生 ConcurrentModificationException 异常。
List<Book> books = new ArrayList<>();
Book book1 = new Book(1,"语文");
books.add(book1);
Book book2 = new Book(2,"数学");
books.add(book2);
Book book3 = new Book(1,"英语");
books.add(book3);
Book book4 = new Book(1,"网络安全");
books.add(book4);
Book book5 = new Book(1,"C语言程序设计");
books.add(book5);
System.out.println("原来的list:"+books.toString());
List<Book> subList = books.subList(0, 1);
for(int i=0;i<subList.size();i++){
subList.get(i).setBookName(subList.get(i).getBookName()+"-updated");
}
System.out.println("修改后list:"+books.toString());
![]()
来自:阿里巴巴Java开发手册
本文详细解析了ArrayList的subList方法使用时的注意事项,强调subList返回的是视图而非独立的ArrayList实例,直接修改会导致原列表变化。同时,对原集合的修改可能在子列表操作时引发ConcurrentModificationException异常。
3040

被折叠的 条评论
为什么被折叠?



