105 votes

Supprimer un élément d'une liste de tableaux

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

J'essaie de faire cela 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 dans l'itération suivante, il supprime le mauvais élément ou donne une exception.

141voto

Alex Lockwood Points 31578

Dans ce cas précis vous devez retirer les éléments par ordre décroissant. Premier indice 5 entonces 3 entonces 1 . Cela permet de supprimer les éléments de la liste sans effets secondaires indésirables.

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

30voto

Jaguar Points 8451

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

10voto

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

    }
}

7voto

shimon001 Points 23

Comme indiqué 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 filetage

4voto

User9527 Points 2623

Je suppose que le tableau i est trié de manière ascendante, voici une autre solution avec Iterator, elle 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++;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X