subList是ArrayList的内部类,
public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(this, 0, fromIndex, toIndex); }
subListRangeCheck校验索引是否越界。
重点subList构造方法
SubList(AbstractList<E> parent, int offset, int fromIndex, int toIndex) { this.parent = parent; this.parentOffset = fromIndex; this.offset = offset + fromIndex; this.size = toIndex - fromIndex; this.modCount = ArrayList.this.modCount; }
List由数组够成的。
this参数是指的是那个外部调用subList方法的那个List对象,其他都挺好理解的。注意的地方是subList是外部list的缩影只要改变sublist的值外部的list也会跟着改变,共享一份内存变量。
所以一般使用了subList最好不要去更改原来的list,一般只对其进行读操作。