Удалить элемент из ArrayList
У меня есть 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]);
}
Но после того, как первый элемент, удаленный позицией массива, будет изменен, а в следующей итерации он удалит неправильный элемент или предоставит исключение.
Ответы
Ответ 1
В этом конкретном случае вы должны удалить элементы в порядке убывания. Первый индекс 5
, затем 3
, затем 1
. Это приведет к удалению элементов из списка без нежелательных побочных эффектов.
for (int j = i.length-1; j >= 0; j--) {
list.remove(i[j]);
}
Ответ 2
Вы можете удалить элементы из 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
Ответ 3
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);
}
}
Ответ 4
String[] mString = new String[] {"B", "D", "F"};
for (int j = 0; j < mString.length-1; j++) {
List_Of_Array.remove(mString[j]);
}
Ответ 5
Как упоминалось ранее
iterator.remove()
возможно, единственный безопасный способ удаления элементов списка во время цикла.
Для более глубокого понимания удаления элементов с помощью итератора попытайтесь просмотреть этот поток
Ответ 6
Как насчет этого? Просто подумайте -
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]
Ответ 7
Попробуйте это,
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]);
}
Ответ 8
remove (int index) метод arraylist удаляет элемент в указанной позиции (индексе) в списке. После удаления элементов массива сдвигаются любые последующие элементы влево.
Значит, если аррайалист содержит {20,15,30,40}
Я назвал метод: arraylist.remove(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]);
}
Ответ 9
Я предполагаю, что массив я является всплывающим, а вот другое решение с Iterator, оно более общее:
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++;
}
Ответ 10
Если вы используете "=", реплика создается для оригинального arraylist во втором, но ссылка такая же, поэтому, если вы измените один список, другой будет также изменен. Используйте это вместо "="
List_Of_Array1.addAll(List_Of_Array);