Лучше быть осторожным при удалении элементов из массива (или итеративного списка) во время итерации по нему.
Самый простой подход, по моему опыту, состоит в том, чтобы создать новый список. Вы можете это сделать?
Если вы посмотрите на свой код, во-первых, помните, что для сравнения используйте «equals» над «==» (поскольку .equals означает «значимо эквивалентный», который, я думаю, вам нужен здесь). (Редактирование: не имеет значения, здесь из-за Autoboxing, но это все-таки хорошая привычка есть)
Но даже это не будет работать:
for (int i = 1; i < arraylist.size(); i++) {
if (arraylist.get(i).equals(v1))
arraylist.remove(i);
}
Так представьте, у вас есть ArrayList из трех целых чисел, все тоже самое. Когда i == 1, элемент в индексе 1 сравнивается со значением в индексе 0 и удаляется. Но тогда элемент в индексе 2 становится элементом в индексе 1, счетчик для цикла увеличивается, поэтому «отсутствует» для удаления последней записи в списке.
Могу ли я рекомендовать что-то подобное?
List<Integer> newlist = new ArrayList<Integer>();
newlist.add(v1);
for (Integer integer : arraylist) {
if (!integer.equals(v1))
newlist.add(integer);
}
Удачи!
P.S. если вы чувствуете себя храбрым, вы могли бы быть в состоянии сделать аккуратный Однострочник из этого: CollectionUtils.filter(Collection,Predicate)
CollectionUtils.filter(arraylist.subList(1, arraylist.size()), new Predicate() {
@Override
public boolean evaluate(Object o) {
return !v1.equals(o);
}
});
Элемент нумерация начинается с 0 (и так ИНТ я должен начать там тоже). –
Это не нужно, если он выполняет итерацию, чтобы удалить все элементы, которые являются дубликатами первого, поскольку первый никогда не является фактическим дубликатом. Я полагаю, что его переменная v1 установлена в arraylist.get (0). –
@JeffLaJoie: Очень хороший момент, не подумал об этом. –