У меня есть ArrayList
предположение list
, и у него 8 элементов AH, и теперь я хочу удалить элемент 1,3,5 позиции, хранящийся в массиве int, из того, list
как я могу это сделать.
Я пытаюсь сделать это с
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
int i[] = {1,3,5};
for (int j = 0; j < i.length; j++) {
list.remove(i[j]);
}
Но после удаления первого элемента позиция массива изменяется, и в следующей итерации он удаляет неправильный элемент или дает исключение.
List
), используяequals("B")
,equals("D")
иequals("F")
. Подумай об этом.Ответы:
В этом конкретном случае вы должны удалять элементы в порядке убывания. Первый индекс
5
, затем3
, затем1
. Это удалит элементы из списка без нежелательных побочных эффектов.источник
String
s, а неInteger
s (тем не менее, я согласен с вашим наблюдением).ArrayList<E>
зачем кому-то удалять объект из позиции,ArrayList
основанной исключительно на позиции, вместо проверки того, что находится в этой позиции? OP вполне может использоватьсяString
в качестве типа объекта для,ArrayList
но ваш ответ - действительно плохая практика кодирования для дженериков, даже если он действительно решает конкретную ситуацию OP.ArrayList<String>
, а неArrayList<E>
.Вы можете удалить элементы из
ArrayList
использованияListIterator
,источник
источник
Как упоминалось ранее
Возможно, это единственный безопасный способ удалить элементы списка во время цикла.
Для более глубокого понимания удаления элементов с помощью итератора попробуйте посмотреть эту ветку
источник
Я предполагаю, что массив i отсортирован по возрастанию, вот еще одно решение с Iterator, оно более общее:
источник
Как насчет этого? Просто подумай-
И результат был-
источник
Попробуйте так,
источник
источник
Если вы используете «=», реплика будет создана для исходного массива во втором списке, но ссылка останется такой же, поэтому, если вы измените один список, другой также будет изменен. Используйте это вместо "="
источник
Метод remove (int index) arrayylist удаляет элемент в указанной позиции (индексе) в списке. После удаления элементов arrayylist все последующие элементы перемещаются влево.
Означает, что в arraylist есть {20,15,30,40}
Я назвал метод: arrayylist.remove (1)
тогда данные 15 будут удалены, а 30 и 40 эти два элемента будут сдвинуты влево на 1.
По этой причине вы должны сначала удалить элемент с более высоким индексом arrayylist.
Итак .. для данной ситуации .. код будет ..
источник