Решить modificationexception


Я получил проблема, когда Java-программа вылетает в 50% случаев. Он включил эту часть

for (Object o : l) {
    for (Object o2 : l) {
        if (!o.equals(o2) && distance(o, o2) <= 1) {
            l.remove(o);
        }
    }

А за исключением был ConcurrentModificationException. Поэтому я переписал его, как это вместо, то это не катастрофа, но разве это правильно?

Iterator<Object> itr = l.iterator();
while (itr.hasNext()){
    Object o = itr.next();
    for (Object o2 : l) {
        if (!o.equals(o2) && distance(o, o2) <= 1) {
            itr.remove();
            break;
        }
    }
}


93
-1
задан 19 марта 2018 в 04:03 Источник Поделиться
Комментарии
1 ответ

Да, это безопасно, потому что вы следуете правилам итератор#удалить:


Удаляет из базовой коллекции последний элемент, возвращенный итератор (дополнительная работа). Этот метод может быть вызван только один раз за вызов Next(). Поведение итератора является неуказанным, если базовый набор изменяется, в то время как итерация выполняется иначе, чем путем вызова этого метода.

Так как вы вырваться при первом вызове удалить, затем двигаюсь дальше, вы никогда не будете нарушать это правило.

1
ответ дан 19 марта 2018 в 04:03 Источник Поделиться