web-dev-qa-db-fra.com

Supprimer un élément de ArrayList

J'ai un ArrayList suppose list, et il a 8 éléments AH et maintenant je veux supprimer 1,3,5 position Élément stocké dans le tableau int de la list comment puis-je faire cela .

J'essaie de faire ça avec

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

Mais après le premier élément supprimé, la position du tableau est modifiée et lors de la prochaine itération, elle supprime le mauvais élément ou donne une exception.

96

Dans ce cas spécifique, vous devez supprimer les éléments par ordre décroissant. Premier index 5, puis 3, puis 1. Cela supprimera les éléments de la liste sans effets secondaires indésirables.

for (int j = i.length-1; j >= 0; j--) {
    list.remove(i[j]);
}
129
Alex Lockwood

Vous pouvez supprimer des éléments de ArrayList en utilisant 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
30
Jainendra
 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);

    }
}
10
user1931357

Comme mentionné précédemment

iterator.remove()

est peut-être le seul moyen sûr de supprimer des éléments de la liste pendant la boucle.

Pour une meilleure compréhension de la suppression d'éléments à l'aide de l'itérateur, essayez de regarder ceci thread

7
shimon001

Je suppose que le tableau i est trié par ordre croissant, voici une autre solution avec Iterator, il est plus générique:

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++;
}
3
User9527
String[] mString = new String[] {"B", "D", "F"};

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

la méthode remove (int index) de arraylist supprime l'élément à la position spécifiée (index) dans la liste. Une fois les éléments de liste supprimés, déplace les éléments suivants vers la gauche.

Signifie si un aryliste contient {20,15,30,40}

J'ai appelé la méthode: arraylist.remove (1)

alors les données 15 seront supprimées et 30 & 40 ces deux éléments seront décalés de 1.

Pour cette raison, vous devez commencer par supprimer l'élément d'index supérieur.

Alors ... pour votre situation donnée ... le code sera ...

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]);
}
2
Avijit Karmakar

Que dis-tu de ça? Il suffit de penser

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

        }


}

Et la sortie était-

[A, C, E, G, H]
2
sgowd

Essayez de cette façon,

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

Si vous utilisez "=", une réplique est créée pour la liste originale dans la seconde, mais la référence est la même. Par conséquent, si vous modifiez une liste, l'autre sera également modifiée. Utilisez ceci au lieu de "="

        List_Of_Array1.addAll(List_Of_Array);
1
Rahul Gupta