2011-12-15 21 views
13

Come rimuovere un oggetto specifico da ArrayList? Supponiamo che io sono una classe come di seguito:Come rimuovere oggetti specifici da ArrayList in Java?

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

Come posso rimuovere oggetto con new ArrayTest(1) dai miei ArrayList<ArrayList>

risposta

20

ArrayList rimuove gli oggetti in base al metodo equals(Object obj). Quindi dovresti implementare correttamente questo metodo. Qualcosa di simile:

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

è possibile specificare il modo in cui si controlla ciascun oggetto.

+0

ma come posso ottenere oggetto di ArrayTest come il precedente ......... – sanu

0

uso di questo codice

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. 
+0

se la posizione è irregolare allora come posso ottenere l'indice di obj. – sanu

+0

perdonami se non riesco a capire il tuo punto. ma non è necessario fornire l'indice, è necessario passare l'oggetto al metodo indexOf e restituirà l'indice dell'oggetto e il metodo remove rimuoverà questo indice da ArrayList. Se hai oggetti duplicati con lo stesso valore, devi implementare il metodo equals nella tua classe. –

+0

ma in questo caso indexOf (obj) mantengono il valore indice dell'ultimo oggetto che è ArrayTest (3) ..... quindi rimuoverà ultimo oggetto – sanu

0

AValchev è giusto. Una soluzione più rapida sarebbe quella di analizzare tutti gli elementi e confrontarli con una proprietà unica.

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

} 

Questa è una soluzione rapida. È meglio implementare il confronto degli oggetti per progetti più grandi.

+0

Cosa fare se si desidera rimuovere più oggetti corrispondenti alla proprietà? – tmh

0

È possibile utilizzare Collections.binarySearch per trovare l'elemento, quindi chiamare remove sull'indice restituito.

vedere la documentazione per Collections.binarySearch qui: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#binarySearch%28java.util.List,%20java.lang.Object%29

Ciò richiederebbe l'oggetto ArrayTest avere .equals attuate però. Dovresti anche chiamare Collections.sort per ordinare l'elenco. Infine, ArrayTest dovrebbe implementare l'interfaccia Comparable, in modo che binarySearch possa funzionare correttamente.

Questo è il modo "corretto" per farlo in Java. Se stai solo cercando di risolvere il problema in modo rapido e sporco, puoi semplicemente scorrere gli elementi e rimuovere quello con l'attributo che stai cercando.

0

Questo mi ha aiutato:

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

invece di

theDeck.remove(numberNeededRemoved); 

ho ricevuto una conformazione rimozione sul primo frammento di codice e una rimozione conformazione delle Nazioni Unite sul secondo.

Prova a cambiare il codice con il primo snippet Penso che sia il tuo problema.

Nathan Nelson

0

Per rimuovere il particolare oggetto da arrayList ci sono due modi. Chiama la funzione di arrayList.

  1. Rimozione sulla base dell'oggetto.
arrayList.remove(object); 

Questo rimuoverà l'oggetto, ma nella maggior parte dei casi, quando arrayList contiene gli elementi di UserDefined DataTypes, questo metodo non ti dà il risultato corretto. Funziona bene solo per Primitive DataTypes. Poiché l'utente desidera rimuovere l'elemento in base al valore del campo dell'oggetto e che non può essere confrontato tramite la funzione di rimozione automatica.

  1. Rimozione sulla base della posizione dell'indice specificato di arrayList. Il modo migliore per rimuovere qualsiasi oggetto o oggetto da arrayList. Innanzitutto, trova l'indice dell'elemento che desideri rimuovere. Quindi chiamare questo metodo arrayList, questo metodo rimuove l'elemento su base indice. E darà il risultato corretto.
arrayList.remove(index); 
0

Se si utilizza Java 8:

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

Java 8 ha un metodo removeIf nell'interfaccia collezione. Per ArrayList, ha un'implementazione avanzata (ordine di n).

Problemi correlati