web-dev-qa-db-fra.com

Comment supprimer un objet spécifique de ArrayList en Java?

Comment puis-je supprimer un objet spécifique de ArrayList? Supposons que j'ai une classe comme ci-dessous:

import Java.util.ArrayList;    
public class ArrayTest {
    int i;

    public static void main(String args[]){
        ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
        ArrayTest obj;
        obj=new ArrayTest(1);
        test.add(obj);
        obj=new ArrayTest(2);
        test.add(obj);
        obj=new ArrayTest(3);
        test.add(obj);
    }
    public ArrayTest(int i){
        this.i=i;
    }
}

Comment puis-je supprimer un objet avec new ArrayTest(1) de mon ArrayList<ArrayList>

15
sanu

ArrayList supprime les objets basés sur la méthode equals(Object obj). Donc, vous devez implémenter correctement cette méthode. Quelque chose comme:

public boolean equals(Object obj) {
    if (obj == null) return false;
    if (obj == this) return true;
    if (!(obj instanceof ArrayTest)) return false;
    ArrayTest o = (ArrayTest) obj;
    return o.i == this.i;
}
24
AValchev

En général, un objet peut être supprimé de deux manières d'un ArrayList (ou généralement de List ), par index ( remove(int) ) et par objet ( remove(Object) ).

Dans ce scénario particulier: Ajoutez une méthode equals(Object) à votre classe ArrayTest. Cela permettra à ArrayList.remove(Object) d’identifier le bon objet.

10
Bombe

Si vous utilisez Java 8:

test.removeIf(t -> t.i == 1);

Java 8 a une méthode removeIf dans l'interface de collection. Pour ArrayList, son implémentation est avancée (ordre de n).

3
tmh

Pour supprimer un objet particulier de arrayList, il existe deux manières. Appelez la fonction arrayList.

  1. Suppression sur la base de l'objet.
arrayList.remove(object);

Cela supprimera votre objet, mais dans la plupart des cas, lorsque arrayList contient les éléments de UserDefined DataTypes, cette méthode ne vous donne pas le résultat correct. Cela fonctionne bien uniquement pour les primitives DataTypes. Parce que l'utilisateur veut supprimer l'élément sur la base de la valeur du champ d'objet et qui ne peut pas être comparé automatiquement par la fonction remove.

  1. Suppression sur la base de la position d'index spécifiée de arrayList. La meilleure façon de supprimer tout élément ou objet de arrayList. Tout d'abord, recherchez l'index de l'élément que vous souhaitez supprimer. Puis appelez cette méthode arrayList, cette méthode supprime l'élément sur la base d'index. Et cela donnera le résultat correct.
arrayList.remove(index);  
3
Aman Goyal

utiliser ce code

test.remove(test.indexOf(obj));

test is your ArrayList and obj is the Object, first you find the index of obj in ArrayList and then you remove it from the ArrayList.
1
Kashif Khan

AValchev a raison ... Une solution plus rapide consisterait à analyser tous les éléments et à les comparer selon une propriété unique. 

String property = "property to delete";

for(int j = 0; j < i.size(); j++)
{
    Student obj = i.get(j);

    if(obj.getProperty().equals(property)){
       //found, delete.
        i.remove(j);
        break;
    }

}

C'est une solution rapide. Vous feriez mieux d'implémenter la comparaison d'objets pour des projets plus importants.

1
victorash

Vous pouvez utiliser Collections.binarySearch pour rechercher l'élément, puis appelez remove sur l'index renvoyé.

Consultez la documentation de Collections.binarySearch ici: http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/Collections.html#binarySearch%28Java.util.List, % 20Java.lang.Object% 29

Cela nécessiterait cependant que l’implémentation de .equals soit appliquée à l’objet ArrayTest. Vous devez également appeler Collections.sort pour trier la liste. Enfin, ArrayTest devrait implémenter l'interface Comparable pour que binarySearch s'exécute correctement.

C'est la "bonne" façon de le faire en Java. Si vous cherchez simplement à résoudre le problème de manière rapide et sale, vous pouvez simplement parcourir les éléments et supprimer celui avec l'attribut que vous recherchez.

0
Alan Delimon
List<Object> list = new ArrayList();
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
  Object obj= iterator.next();
    if (obj.getId().equals("1")) {
       // Remove the current element from the iterator and the list.
       iterator.remove();
    }
}
0
Jules S.

Voici un exemple complet. nous devons utiliser méthode remove ()} _ de la méthode

import Java.util.ArrayList;
import Java.util.Iterator;

public class ArrayTest {
    int i;
    public static void main(String args[]) {
        ArrayList<ArrayTest> test = new ArrayList<ArrayTest>();
        ArrayTest obj;
        obj = new ArrayTest(1);
        test.add(obj);
        obj = new ArrayTest(2);
        test.add(obj);
        obj = new ArrayTest(3);
        test.add(obj);
        System.out.println("Before removing size is " + test.size() + " And Element are : " + test);
        Iterator<ArrayTest> itr = test.iterator();
        while (itr.hasNext()) {
            ArrayTest number = itr.next();
            if (number.i == 1) {
                itr.remove();
            }
        }
        System.out.println("After removing size is " + test.size() + " And Element are :" + test);
    }
    public ArrayTest(int i) {
        this.i = i;
    }
    @Override
    public String toString() {
        return "ArrayTest [i=" + i + "]";
    }

}

 Working demo Screen

0
vipul gulhane

Si vous souhaitez supprimer plusieurs objets correspondant à la propriété, essayez ceci.

J'ai utilisé le code suivant pour supprimer un élément du tableau d'objets, cela m'a aidé.

En général, un objet peut être supprimé de deux manières d'une ArrayList (ou d'une liste), par index (remove (int)) et par object (remove (Object)).

un certain temps pour vous arrayList.remove(index)ouarrayList.remove(obj.get(index)) en utilisant ces lignes peut ne pas fonctionner, essayez d'utiliser le code suivant.

for (Iterator<DetailInbox> iter = detailInboxArray.iterator(); iter.hasNext(); ) {
    DetailInbox element = iter.next();
   if (element.isSelected()) {
      iter.remove();
   }
}
0
Sagar

Cela m'a aidé:

        card temperaryCardFour = theDeck.get(theDeck.size() - 1);
        theDeck.remove(temperaryCardFour);    

au lieu de 

theDeck.remove(numberNeededRemoved);

J'ai eu une conformation de suppression sur le premier extrait de code et une conformation de suppression sur le second.

Essayez de changer votre code avec le premier extrait, je pense que c'est votre problème.

Nathan Nelson

0
Nathan Nelson
    ArrayTest obj=new ArrayTest(1);
    test.add(obj);
    ArrayTest obj1=new ArrayTest(2);
    test.add(obj1);
    ArrayTest obj2=new ArrayTest(3);
    test.add(obj2);

    test.remove(object of ArrayTest);

vous pouvez spécifier comment vous contrôlez chaque objet.

0
Pritom

J'ai essayé cela et ça marche pour moi:

ArrayList<cartItem> cartItems= new ArrayList<>();

//filling the cartItems

cartItem ci=new cartItem(itemcode,itemQuantity);//the one I want to remove

Iterator<cartItem> itr =cartItems.iterator();
while (itr.hasNext()){
   cartItem ci_itr=itr.next();
   if (ci_itr.getClass() == ci.getClass()){
      itr.remove();
      return;
    }
}
0
user9402274