код нижче видає 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() + " ");
}
}
}