код нижче видає ConcurrentModificationException на 22 рядку при виклику ф-ції next()
▼Прихований текст
import java.util.ArrayList;
import java.util.Iterator;
class Sequence {
  private ArrayList<Object> items = new ArrayList<Object>();
  public void add(Object x) {
      items.add(x);
  }
  private Iterator<Object> iter = items.iterator();
  public Iterator<Object> iterator(){
    return iter;
  }
}
class c1{
  public static void main(String[] args) {
    Sequence sequence = new Sequence();
    for(int i = 0; i < 10; i++)
      sequence.add(Integer.toString(i));
    Iterator<Object> iterator = sequence.iterator();
    while(iterator.hasNext()) {
      System.out.print(iterator.next() + " ");
    }
  }
}
змінюю лиш кусок коду
private Iterator<Object> iter = items.iterator();
  public Iterator<Object> iterator(){
    return iter;
  }
на 
    public Iterator<Object> iterator(){
        return items.iterator();
    }
В виправленому коді  повертаю кожен раз новий ітератор, я розумію, що так в принципі має бути за правилами, але не розумію в чому тоді моя помилка. 
Код який працює
▼Прихований текст
import java.util.ArrayList;
import java.util.Iterator;
class Sequence {
    private ArrayList<Object> items = new ArrayList<Object>();
    public void add(Object x) {
        items.add(x);
    }
    public Iterator<Object> iterator(){
        return items.iterator();
    }
}
class c1{
    public static void main(String[] args) {
        Sequence sequence = new Sequence();
        for(int i = 0; i < 10; i++)
            sequence.add(Integer.toString(i));
        Iterator<Object> iterator = sequence.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
    }
}