Я нашел тот же вопрос на Почему у нестационарного c внутреннего класса SubList ArrayList есть переменная-член "parent"? . Ответ был шесть лет go, но у меня все еще есть собственное замешательство. Если в SubList нет «родительского» члена, будет ли работать класс SubList? Мы видим источник ArrayList.SubList
private class SubList extends AbstractList<E> implements RandomAccess {
private final AbstractList<E> parent;
private final int parentOffset;
private final int offset;
int size
SubList(Abstract<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;
}
public E set(int index, E e) {
E oldValue = ArrayList.this.elementData(offset + index);
Array.this.elementData[offset + index] = e;
}
public E get(int index) {
return ArrayList.this.elementData(offset + index);
}
public void add(int index, E e) {
// ArrayList.this.add(parentOffset + index, e); ?
parent.add(parentOffset + index, e);
this.modCount = parent.modCount;
this.size++;
}
public E remove(int index) {
// E result = Array.this.remove(parentOffset + index); ?
E result = parent.remove(parentOffset + index);
this.modCount = parent.modCount;
this.size--;
return result;
}
}
Можем ли мы заменить parent.add
, parent.remove
на ArrayList.this.add
, ArrayList.this.remove
? Я думаю, это нормально. Так нужен ли нам «родительский» член-переменная в классе ArrayList.SubList?