2013-06-11 15 views
9

Ho bisogno di rimuovere il numero intero dall'arrayista intero. Non ho problemi con le stringhe e altri oggetti. Ma quando lo rimuovo, l'intero viene trattato come un indice invece di un oggetto.Come rimuovere un intero dalla lista?

List<Integer> list = new ArrayList<Integer>(); 
list.add(1); 
list.add(2); 
list.add(300); 
list.remove(300); 

Quando sto cercando di rimuovere 300 sto ottenendo: 06-11 06:05:48.576: E/AndroidRuntime(856): java.lang.IndexOutOfBoundsException: Invalid index 300, size is 3

+2

Hanno hai controllato i documenti per 'ArrayList'? – squiguy

+0

'list.remove (300);' qui 300 trattato come 'primitivo' int', passa oggetto 'intero '. –

risposta

22

Questo è normale, ci sono due versioni dello .remove() metodo per elenchi: uno che accetta un intero come argomento e rimuove la voce in questo indice, l'altro che accetta un tipo generico come argomento (che, in fase di esecuzione, è un Object) e lo rimuove dall'elenco.

E il meccanismo di ricerca per i metodi sceglie sempre il metodo più specifico prima ...

è necessario:

list.remove(Integer.valueOf(300)); 

al fine di chiamare la versione corretta di .remove().

4

Try (passaggio di un Integer, oggetto, invece di un int, primitivo) -

list.remove(Integer.valueOf(300)); 

per invocare la metodo corretto - List.remove(Object o)

11

Utilizzare indexof per trovare l'indice dell'articolo.

list.remove(list.indexOf(300)); 
+4

Mentre funziona, sarà molto più costoso da eseguire rispetto all'utilizzo di "Integer.valueOf" per ottenere semplicemente un oggetto. – ApproachingDarknessFish

+0

Assolutamente lo sarà;) – SBI

+0

Perché questo viene messo in svantaggio quando chiaramente non è il modo giusto per farlo? – assylias

1
Use list.remove((Integer)300); 
+1

L'ho provato. E ha funzionato bene senza errori. Spiega perché questo è sbagliato –

+0

Le mie scuse, ho intuito che non funzionerebbe, ma apparentemente l'autoboxing è leggermente più esagerato di quanto sospettassi. Hai ragione; non c'è problema. – ApproachingDarknessFish

+0

@ValekHalfHeart grazie. Pensavo che la mia risposta non fosse una buona pratica quando era giù per il voto. –

2

Prova sotto codice per rimuovere intero da lista,

public static void main(String[] args) { 
     List<Integer> lIntegers = new ArrayList<Integer>(); 
     lIntegers.add(1); 
     lIntegers.add(2); 
     lIntegers.add(300); 
     lIntegers.remove(new Integer(300)); 
     System.out.println("TestClass.main()"+lIntegers); 
} 

Se si rimuove voce passando primitivo allora lo prenderà come indice e non il valore/oggetto

Problemi correlati