Почему итераторы быстро терпят неудачу и действительно ли они быстро терпят неудачу?

Итераторы в Java работают быстро. Если значения итератора изменяются во время итерации, генерируется исключение.

Это чисто для безопасности? Я уверен, что в некоторых случаях это не имеет большого значения, если значения меняются. Например, предположим, что вы отправляете некритические оповещения участникам в итераторе каждые 10 секунд. Зачем вас беспокоить, если содержимое меняется?

Кроме того, отказоустойчивая реализация просто проверяет счет. Это ошибочно, если другой поток добавляет и удаляет счетчик будет таким же, даже если содержимое итератора изменилось. Не было бы лучше использовать номер версии?

1 ответ

Отказоустойчивое поведение предназначено исключительно для облегчения отладки. Общее правило заключается в том, что если вы изменяете коллекцию во время итерации по ней с помощью других средств, кроме членов итератора, поведение итератора перестает быть предсказуемым. Это создаст исключение на основе максимальных усилий.

Таким образом, любой дорогостоящий метод отслеживания является плохой идеей.

Другие вопросы по тегам