2014-02-16 4 views
0

У меня есть общий вопрос о программе, которую я делаю.Параллельная модификация Исключения с итераторами

У меня есть связанный список, и одна из переменных экземпляра - это версия int, чтобы убедиться, что исключений параллельной модификации не существует.

Если я добавлю элемент в связанный список, я изменю версию.

Я также использую пользовательский итератор, который выполняет итерацию через связанный список, который также имеет свою собственную версию. Когда создается итератор linkedList, он устанавливает версию итератора равной версии связанногоList.

Мой вопрос: Если я удалю элемент с помощью итератора, должен ли я изменить версию итераторов?

В основном каждый метод класса Iterator сначала проверяет, чтобы версии были одинаковыми, и если это не то, что он вызывает новое одновременное изменение.

Имеет значение, изменит ли итератор список?

+0

Пример кода поможет. – alfasin

+0

это просто произвольный вопрос. – Programatic

+0

Чтобы обеспечить произвольный ответ - пример кода поможет. – alfasin

ответ

0

Мой вопрос: если я удалю элемент с помощью Iterator, должен ли я изменить версию итераторов?

Да, обычно вы также должны изменить версию своего Итератора, если вы хотите разрешить изменения в списке с помощью Итератора. В противном случае вы должны выбросить java.lang.UnsupportedOperationException.

Посмотрите, как Итератор java.util.LinkedList обрабатывает изменения: Во время добавления и удаления методов он сначала вызывает checkForComodification()

final void checkForComodification() { 
    if (modCount != expectedModCount) 
     throw new ConcurrentModificationException(); 
} 

и в конце концов она увеличится expectedModCount одно:

public void add(E e) { 
    checkForComodification(); 
    [...] 
    expectedModCount++; 
} 
Смежные вопросы