Buggy code:
public class FastArrayList extends ArrayList { public FastArrayList ( ) { } public FastArrayList ( int capacity ) { } public FastArrayList ( Collection collection ) { } protected ArrayList list = null ; protected boolean fast = false ; public boolean getFast ( ) { } public void setFast ( boolean fast ) { } public boolean add ( Object element ) { } public void add ( int index , Object element ) { } public boolean addAll ( Collection collection ) { } public boolean addAll ( int index , Collection collection ) { } public void clear ( ) { } public Object clone ( ) { } public boolean contains ( Object element ) { } public boolean containsAll ( Collection collection ) { } public void ensureCapacity ( int capacity ) { } public boolean equals ( Object o ) { } public Object get ( int index ) { } public int hashCode ( ) { } public int indexOf ( Object element ) { } public boolean isEmpty ( ) { } public Iterator iterator ( ) { } public int lastIndexOf ( Object element ) { } public ListIterator listIterator ( ) { } public ListIterator listIterator ( int index ) { } public Object remove ( int index ) { } public boolean remove ( Object element ) { } public boolean removeAll ( Collection collection ) { } public boolean retainAll ( Collection collection ) { } public Object set ( int index , Object element ) { } public int size ( ) { } public List subList ( int fromIndex , int toIndex ) { } public Object [ ] toArray ( ) { } public Object [ ] toArray ( Object [ ] array ) { } public String toString ( ) { } public void trimToSize ( ) { } private class SubList implements List { private int first ; private int last ; private List expected ; public SubList ( int first , int last ) { } private List get ( List l ) { } public void clear ( ) { } public boolean remove ( Object o ) { } public boolean removeAll ( Collection o ) { } public boolean retainAll ( Collection o ) { } public int size ( ) { } public boolean isEmpty ( ) { } public boolean contains ( Object o ) { } public boolean containsAll ( Collection o ) { } public Object [ ] toArray ( Object [ ] o ) { } public Object [ ] toArray ( ) { } public boolean equals ( Object o ) { } public int hashCode ( ) { } public boolean add ( Object o ) { } public boolean addAll ( Collection o ) { } public void add ( int i , Object o ) { } public boolean addAll ( int i , Collection o ) { } public Object remove ( int i ) { } public Object set ( int i , Object a ) { } public Iterator iterator ( ) { } public ListIterator listIterator ( ) { } public ListIterator listIterator ( int i ) { } public Object get ( int i ) { } public int indexOf ( Object o ) { } public int lastIndexOf ( Object o ) { } public List subList ( int f , int l ) { } private class SubListIter implements ListIterator { private List expected ; private ListIterator iter ; private int lastReturnedIndex = - 1 ; public SubListIter ( int i ) { } private void checkMod ( ) { } List get ( ) { } public boolean hasNext ( ) { } public Object next ( ) { } public boolean hasPrevious ( ) { } public Object previous ( ) { } public int previousIndex ( ) { } public int nextIndex ( ) { } public void remove ( ) { checkMod ( ) ; if ( ( lastReturnedIndex ) < 0 ) { throw new IllegalStateException ( ) ; } get ( ) . remove ( lastReturnedIndex ) ; ( last ) -- ; expected = list ; <START_BUG> iter = get ( ) . listIterator ( previousIndex ( ) ) ; <END_BUG> lastReturnedIndex = - 1 ; } public void set ( Object o ) { } public void add ( Object o ) { } } } private class ListIter implements ListIterator { private List expected ; private ListIterator iter ; private int lastReturnedIndex = - 1 ; public ListIter ( int i ) { } private void checkMod ( ) { } List get ( ) { } public boolean hasNext ( ) { } public Object next ( ) { } public boolean hasPrevious ( ) { } public Object previous ( ) { } public int previousIndex ( ) { } public int nextIndex ( ) { } public void remove ( ) { checkMod ( ) ; if ( ( lastReturnedIndex ) < 0 ) { throw new IllegalStateException ( ) ; } get ( ) . remove ( lastReturnedIndex ) ; expected = list ; iter = get ( ) . listIterator ( lastReturnedIndex ) ; lastReturnedIndex = - 1 ; } public void set ( Object o ) { } public void add ( Object o ) { } } }

Fix:
iter = get ( ) . listIterator ( lastReturnedIndex ) ;