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开发手册