Je lis le code de AbstractList où il y a une classe imbriquée Itr, et tout va bien. Ce qui me trouble, c'est pourquoi Java fournit un ensemble de méthodes à son Iterator afin qu'il puisse être utilisé pour modifier la collection sous-jacente, comme par exemple add()
, remove()
, set()
.
Quelle est la raison essentielle pour laquelle vous devez exposer la collection à l'itérateur ? Est-ce plus pratique que de modifier une collection par les méthodes de Collection ?
private class Itr implements Iterator<E> {
//......bha
public void remove() {
if (lastRet < 0)
throw new IllegalStateException();
checkForComodification();
try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}
}
private class ListItr extends Itr implements ListIterator<E> {
ListItr(int index) {
cursor = index;
}
public void set(E e) ///...
public void add(E e) //.....