2015-06-29 12 views
6

Vorrei rimuovere gli elementi in un ArrayList con l'indice 0 e 1. Ma non funziona e non conosco il modo.ArrayList Rimuovi elemento con indice 0 e 1

Il codice è il seguente

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator; 


public class Test{ 

    public static void main(String[] args){ 
     Collection c = new ArrayList(); 

     c.add("A"); 
     c.add("B"); 
     c.add("C"); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 

     System.out.println(""); 
     c.remove(1); 
     c.remove(0); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 



    } 
} 

L'uscita è

A 
B 
C 

A 
B 
C 

Ma l'uscita dovrebbe essere

A 
B 
C 

C 

risposta

6

Credo che sia perché si sta chiamando rimuovere (int) su un Collection. Collection non dichiara il metodo remove (int), ma ha remove (Object), quindi java è autoboxing del tuo int in un intero. Ma dal momento che quel numero intero non è nella Raccolta, nulla viene rimosso

2

Penso che tu abbia colpito una lezione importante.

Il problema è che Collection non supporta remove(int), solo remove(Object). Quindi il compilatore sta inscatolando int come un intero, quell'elemento non si trova nella raccolta e quindi non lo rimuove.

Se si dichiara invece la raccolta come ArrayList, funziona.

0

Le raccolte sono semplicemente raccolte di dati, quindi non sempre mantengono l'ordine. Suggerirei di sostituire la collezione con un ArrayList

public class Test{ 


public static void main(String[] args){ 
    ArrayList c = new ArrayList(); 

    c.add("A"); 
    c.add("B"); 
    c.add("C"); 

    for(Iterator i = c.iterator(); i.hasNext();) 
     System.out.println(i.next()); 

    System.out.println(""); 
    c.remove(1); 
    c.remove(0); 

    for(Iterator i = c.iterator(); i.hasNext();) 
     System.out.println(i.next()); 



} 
} 
1

Come già detto da @ControlAltDel, Collection non supporta remove(int) solo remove(Object) e la int si sta auto-boxed a Integer e che Integer non è nella collezione; quindi nulla viene rimosso.

Se si desidera mantenere c come raccolta, è possibile rimuovere i primi due elementi utilizzando Iterator.remove(); in questo modo:

public static void main(final String[] args){ 
    Collection<String> c = new ArrayList<>(Arrays.asList("A","B","C")); 

    for(String str : c) 
     System.out.println(str); 
    System.out.println(); 

    Iterator<String> it = c.iterator(); 
    it.next(); 
    it.remove(); 
    it.next(); 
    it.remove(); 

    for(String str : c) 
     System.out.println(str); 
} 
2

Cambia la tua c a ArrayList perché:

Collection.remove (Object o)

Rimuove una singola istanza dell'elemento specificato da questa collezione, se è presente (operazione opzionale). Più formalmente, rimuove un elemento di posta in modo tale che (o == null e == null:? O.equals (e))

In precedenza se fosse c.remove ("A"); funzionerà. Scrivere c.remove (1); sta cercando un oggetto Integer da rimuovere.

ArrayList.remove (int index)

rimuovere l'elemento nella posizione specificata in questa lista. Sposta tutti gli elementi successivi a sinistra (sottrae uno dai loro indici).

Così il vostro programma dovrebbe essere come segue:

public class Test{ 

    public static void main(String[] args){ 
     ArrayList c = new ArrayList(); 

     c.add("A"); 
     c.add("B"); 
     c.add("C"); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 

     System.out.println(""); 
     c.remove(1); 
     c.remove(0); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 
    } 
} 
1

cosa si ha realmente bisogno è

c.remove((String)"A"); 
c.remove((String)"B"); 

invece di fare riferimento a loro a mezzo di indici, se si desidera continuare a utilizzare Collection. Il motivo per lo stesso è che il metodo remove in Collection prevede l'argomento Object. Pertanto, quando scrivi c.remove(0), cerca nell'elenco un elemento 0 e prova a rimuoverlo.

Si prega di considerare i compromessi in termini di prestazioni mentre si utilizza Collection anziché List per questo caso.