// An highlighted blockpackage java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;import jdk.internal.access.SharedSecrets;import jdk.internal.util.ArraysSupport;publicclassArrayList<E>extendsAbstractList<E>implementsList<E>, RandomAccess, Cloneable, java.io.Serializable
{...public Iterator<E>iterator(){returnnewItr();}/**
* An optimized version of AbstractList.Itr
*/privateclassItrimplementsIterator<E>{
int cursor;// index of next element to return
int lastRet =-1;// index of last element returned; -1 if no such
int expectedModCount = modCount;// prevent creating a synthetic constructorItr(){}public boolean hasNext(){return cursor != size;}
@SuppressWarnings("unchecked")publicEnext(){checkForComodification();
int i = cursor;if(i >= size)thrownewNoSuchElementException();
Object[] elementData = ArrayList.this.elementData;if(i >= elementData.length)thrownewConcurrentModificationException();
cursor = i +1;return(E) elementData[lastRet = i];}publicvoidremove(){if(lastRet <0)thrownewIllegalStateException();checkForComodification();try{
ArrayList.this.remove(lastRet);
cursor = lastRet;
lastRet =-1;
expectedModCount = modCount;}catch(IndexOutOfBoundsException ex){thrownewConcurrentModificationException();}}
@Override
publicvoidforEachRemaining(Consumer<?superE> action){
Objects.requireNonNull(action);
final int size = ArrayList.this.size;
int i = cursor;if(i < size){
final Object[] es = elementData;if(i >= es.length)thrownewConcurrentModificationException();for(; i < size && modCount == expectedModCount; i++)
action.accept(elementAt(es, i));// update once at end to reduce heap write traffic
cursor = i;
lastRet = i -1;checkForComodification();}}
final voidcheckForComodification(){if(modCount != expectedModCount)thrownewConcurrentModificationException();}}...}