List
返回List
父集合List
List
List
其中subList(0, 5)取得的是下标为0到4的元素,不包含下标为5的元素。
如果发生结构性修改的是返回的子list,那么原来的list的大小也会发生变化;
而如果发生结构性修改的是原来的list(不包括由于返回的子list导致的改变),那么返回的子list语义上将会是undefined。在AbstractList(ArrayList的父类)中,undefined的具体表现形式是抛出一个ConcurrentModificationException。
因此,如果你在调用了sublist返回了子list之后,如果修改了原list的大小,那么之前产生的子list将会失效,变得不可使用。
tips: 如何删除一个list的某个区段,比如删除list的第2-5个元素?
方法是: 可以利用sublist的幕后还是原来的list的这个特性,比如
list.subList(from, to).clear();
这样就可以了。
subList(l,r) 是左闭右开 例如:subList(1,3) 截取的是下标为1和2两个元素
subList() 返回对象是RandomAccessSubList不可序列化的实例化
切记不要这么写:list = (LinkedList) list.subList(0, 2);
否则程序会这样报复你:java.util.SubList cannot be cast to java.util.LinkedList
向下转型的前提是你要先是那个类
总结:list = new ArrayList(list.subList(0, 2)); 这么写总没错啦~