Удалить элемент из ArrayList
у меня есть ArrayList
предположим list
, и он имеет 8 элементов A-H И теперь я хочу удалить 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]);
}
но после того, как первый элемент удален, позиция массива изменяется, и на следующей итерации он удаляет неправильный элемент или дает исключение.
10 ответов:
в данном конкретном случае, вы должны удалить элементы в порядке убывания. Первый индекс
5
, потом3
, потом1
. Это позволит удалить элементы из списка без нежелательных побочных эффектов.for (int j = i.length-1; j >= 0; j--) { list.remove(i[j]); }
вы можете удалить элементы из
ArrayList
С помощьюListIterator
,ListIterator listIterator = List_Of_Array.listIterator(); /* Use void remove() method of ListIterator to remove an element from List. It removes the last element returned by next or previous methods. */ listIterator.next(); //remove element returned by last next method listIterator.remove();//remove element at 1st position listIterator.next(); listIterator.next(); listIterator.remove();//remove element at 3rd position listIterator.next(); listIterator.next(); listIterator.remove();//remove element at 5th position
public void DeleteUserIMP(UserIMP useriamp) { synchronized (ListUserIMP) { if (ListUserIMP.isEmpty()) { System.out.println("user is empty"); } else { Iterator<UserIMP> it = ListUserIMP.iterator(); while (it.hasNext()) { UserIMP user = it.next(); if (useriamp.getMoblieNumber().equals(user.getMoblieNumber())) { it.remove(); System.out.println("remove it"); } } // ListUserIMP.remove(useriamp); System.out.println(" this user removed"); } Constants.RESULT_FOR_REGISTRATION = Constants.MESSAGE_OK; // System.out.println("This user Deleted " + Constants.MESSAGE_OK); } }
Как упоминалось ранее
iterator.remove()
возможно, это единственный безопасный способ удалить элементы списка во время цикла.
для более глубокого понимания удаления элементов с помощью итератора, попробуйте посмотреть на это thread
String[] mString = new String[] {"B", "D", "F"}; for (int j = 0; j < mString.length-1; j++) { List_Of_Array.remove(mString[j]); }
Я предполагаю, что массив I сортируется по возрастанию, вот еще одно решение с итератором, оно более общее:
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}; Iterator<String> itr = list.iterator(); int pos = 0; int index = 0; while( itr.hasNext() ){ itr.next(); if( pos >= i.length ){ break; } if( i[pos] == index ){ itr.remove(); pos++; } index++; }
Как насчет этого? Только подумай -
import java.util.ArrayList; class Solution { public static void main (String[] args){ ArrayList<String> List_Of_Array = new ArrayList<String>(); List_Of_Array.add("A"); List_Of_Array.add("B"); List_Of_Array.add("C"); List_Of_Array.add("D"); List_Of_Array.add("E"); List_Of_Array.add("F"); List_Of_Array.add("G"); List_Of_Array.add("H"); int i[] = {1,3,5}; for (int j = 0; j < i.length; j++) { List_Of_Array.remove(i[j]-j); } System.out.println(List_Of_Array); } }
и выход был-
[A, C, E, G, H]
попробуй так,
ArrayList<String> List_Of_Array = new ArrayList<String>(); List_Of_Array.add("A"); List_Of_Array.add("B"); List_Of_Array.add("C"); List_Of_Array.add("D"); List_Of_Array.add("E"); List_Of_Array.add("F"); List_Of_Array.add("G"); List_Of_Array.add("H"); int i[] = {5,3,1}; for (int j = 0; j < i.length; j++) { List_Of_Array.remove(i[j]); }
remove(int index) метод arraylist удаляет элемент в указанной позиции (индекс) в списке. После удаления элементов arraylist все последующие элементы сдвигаются влево.
означает, если arraylist содержит {20,15,30,40}
Я вызвал метод: arraylist.удалить(1)
затем данные 15 будут удалены, а 30 & 40 Эти два элемента будут сдвинуты на 1.
по этой причине вы должны удалить более высокий индекс элемента первого класса ArrayList.
Так..для вашей конкретной ситуации..код будет..
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 = i.length-1; j >= 0; j--) { list.remove(i[j]); }