| 函数 | 描述 |
| --- | --- |
| public List subList(int fromIndex, int toIndex) | Returns a view of the portion of this list between the specified {fromIndex}, inclusive, and {toIndex}, exclusive. (If `{fromIndex}` and `{toIndex}` are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. The returned list supports all of the optional list operations.
[a, b, c, d, e] ;
subList(1,4);
return=>[b,c,d]|
#SubList
public List subList(int fromIndex, int toIndex)
```
private class SubList extends AbstractList implements RandomAccess {
private final AbstractList parent;
private final int parentOffset;
private final int offset;
int size;
SubList(AbstractList 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;
}
public E set(int index, E e) {
rangeCheck(index);
checkForComodification();
E oldValue = ArrayList.this.elementData(offset + index);
ArrayList.this.elementData[offset + index] = e;
return oldValue;
}
public E get(int index) {
rangeCheck(index);
checkForComodification();
return ArrayList.this.elementData(offset + index);
}
public int size() {
checkForComodification();
return this.size;
}
public void add(int index, E e) {
rangeCheckForAdd(index);
checkForComodification();
parent.add(parentOffset + index, e);//--------------->注意
this.modCount = parent.modCount;
this.size++;
}
public E remove(int index) {
rangeCheck(index);
checkForComodification();
E result = parent.remove(parentOffset + index);//--------------->注意
this.modCount = parent.modCount;
this.size--;
return result;
}
```
可以看出SubList这个类其实就是使用的传进来的ArrayList parent进行添加和删除操作,并没有重新复制一份,所以其产生的影响会对原来的list产生影响。