- 1
- 2
- 3
- 4
- 5
for (int j = 0; j < fieldsToRemove.size(); j++) {
if (fieldsToDelete.getField(j).getKind().equals("GroupField")) {
resFieldContr.remove(j--);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+76
for (int j = 0; j < fieldsToRemove.size(); j++) {
if (fieldsToDelete.getField(j).getKind().equals("GroupField")) {
resFieldContr.remove(j--);
}
}
собственно цикл.
нашел в рабочем проекте
gegMOPO4 30.11.2010 19:14 # 0
tas 30.11.2010 19:28 # 0
Oleg_quadro 01.12.2010 00:26 # 0
absolut 30.11.2010 21:56 # 0
gegMOPO4 01.12.2010 00:57 # 0
Можно
но это длиннее и непривычно.
Ну и для длинных списков и большого количества удалений имеет смысл избавиться от O(N^2):
bugmenot 01.12.2010 02:02 # +2
с хвоста перебрать элементы религия не позволяет?
absolut 01.12.2010 08:00 # +1
absolut 01.12.2010 10:46 # 0
bugmenot 01.12.2010 14:17 # 0
gegMOPO4 01.12.2010 11:07 # 0
absolut 01.12.2010 08:05 # 0
К тому же, нормальная практика получать в цикле ссылку (указатель) на следующий элемент для обработки,
не зависимо от того, удаляется текущий или нет.
Я считаю, что изменение переменной цикла должно быть локализовано, так проще понять его назначение и совершить меньше ошибок.
gegMOPO4 01.12.2010 11:11 # 0
absolut 01.12.2010 11:30 # 0
alt 01.12.2010 11:39 # +2
Анонимус 01.12.2010 13:47 # 0
ArtPetroff 06.12.2010 02:18 # 0
Итератор на то и имеет метод remove, чтобы можно было текущий элемент удалить.
Анонимус 06.12.2010 13:23 # 0
ArtPetroff 06.12.2010 13:47 # 0
Анонимус 06.12.2010 14:27 # 0
ArtPetroff 06.12.2010 14:51 # +1
И вообще, предлагаю запустить код.
Анонимус 06.12.2010 14:57 # +2
Удалять из итератора можно. Нельзя удалять напрямую из коллекции, по которой создан итератор.
я пальцем в лужу, бывает)