Вопрос по java – Удалить элемент из ArrayList

93

у меня естьArrayList предполагатьlist, и он имеет 8 элементов A-H, и теперь я хочу удалить 1,3,5 позиции элемента, хранящегося в массиве из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]);
}

Но после удаления первого элемента позиционированный массив изменяется и на следующей итерации удаляет неправильный элемент или выдает исключение.

Да, я хочу удалить Предмет, но как я могу сопоставить Предметы. На самом деле это элементы в ListView и при выборе я хочу удалить их из БД и массива и обновить адаптер и список Krishnakant Dalal
Ваша логика ошибочна. Конечно, вы должны думать не о положении каждого предмета, а думать о самих предметах. Другими словами, вы не хотите удалять позиции 1, 3 & amp; 5 но вместо этого вы хотите удалить элементы (где бы они ни находилисьList) с помощьюequals("B"), equals("D") а такжеequals("F"), Думаю об этом. Squonk
Как насчет удаления его в порядке убывания индексов (отсортируйте индексы, затем сначала удалите элемент с самым высоким индексом)? nhahtdh
Медленная опция: повторять один раз, добавляя элементы во второй список, повторять удаление второго списка из первого (необязательный шаг: вернуть второй список вызывающей стороне) SparK

Ваш Ответ

10   ответов
1

= & quot;, реплика создается для исходного массива во втором списке, но ссылка такая же, поэтому при изменении одного списка другой также будет изменен. Используйте это вместо & quot; = & quot;

        List_Of_Array1.addAll(List_Of_Array);
2

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]);
}
3

что массив 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++;
}
2

зиции (индекс) в списке. После удаления элементов массива сдвигаются любые последующие элементы влево.

Означает, что в массиве содержится {20,15,30,40}

Я назвал метод: arraylist.remove (1)

тогда данные 15 будут удалены, а 30 & amp; 40 эти два элемента будут смещены на 1.

По этой причине вы должны сначала удалить элемент индекса с более высоким индексом.

Так что .. для вашей ситуации .. код будет ..

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]);
}
125

In this specific case, вы должны удалить элементы в порядке убывания. Первый индекс5, затем3, затем1, Это удалит элементы из списка без нежелательных побочных эффектов.

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededArrayList<String>Error: User Rate Limit ExceededArrayList<E>.
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededStringError: User Rate Limit ExceededIntegerError: User Rate Limit Exceeded
Error: User Rate Limit ExceededArrayList<E>Error: User Rate Limit ExceededArrayListError: User Rate Limit ExceededStringError: User Rate Limit ExceededArrayListError: User Rate Limit Exceeded
2

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]
10
 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);

    }
}
7

Как упоминалось ранее

iterator.remove()

Возможно, это единственный безопасный способ удалить элементы списка во время цикла.

Для более глубокого понимания удаления элементов с помощью, итератор, попробуйте взглянуть на этонить

Error: User Rate Limit Exceeded
30

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
Error: User Rate Limit Exceeded
4
String[] mString = new String[] {"B", "D", "F"};

for (int j = 0; j < mString.length-1; j++) {
        List_Of_Array.remove(mString[j]);
}

Похожие вопросы