java中有一个返回子列表的方法:java
public list<e> subList(int fromIndex, int toIndex){ subListRangeCheck(fromIndex, toIndex,size); return new SubList(this , 0, fromIndex, toIndex); }
返回一个fromIndex为起点,toIndex为终点(不包含终点)的子列表。从上实现代码中能够看到,先检查一下单签的fromIndex和toIndex是否合法,若是不合法,那么就退出了该函数逻辑。要是合法,能够看出其返回了一个this也就是原始列表的部分元素视图,这样就造成了一个子列表。函数
这也致使了,若是针对原来的list或者是sublist返回的list的修改(这里的修改是不涉及list大小),都是对同一段内存存储的数据作修改。(这种修改叫作非结构修改)测试
若是发生结构性修改的是原来的list(不包括因为返回的子list致使的改变),那么返回的子list语义上将会是undefined。在AbstractList(ArrayList的父类)中,undefined的具体表现形式是抛出一个ConcurrentModificationException。若是你在调用了sublist返回了子list以后,若是修改了原list的大小,那么以前产生的子list将会失效,变得不可以使用。this
特别提醒:在使用sublist部分的白盒测试要重点对上述状况作测试。spa