2012-04-02 19 views
24

Ho creato un elenco intero e sto cercando di restituire l'indice di un valore specifico.,L'array è 3,8,2,5,1,4,7,6 e voglio restituire indexOf (3), che dovrebbe essere 0.Perché indexOf non riesce a trovare l'oggetto?

Ho provato quanto segue in Eclipse Java Scrapbook dopo l'importazione java.util *:.

int[] A = {3,8,2,5,1,4,7,9}; 
Arrays.asList(A).indexOf(3) 

ho anche provato:

int[] A = {3,8,2,5,1,4,7,6}; 
ArrayList<Integer> l = new ArrayList(Arrays.asList(A)); 
l.indexOf(3) 

Entrambi ritornano -1. Perché? Come farlo funzionare come previsto?

+0

Grazie per le risposte a tutti. Con questa modifica però dovrei cambiare la mia struttura dati, quindi userò il metodo binarySearch perché funzionerà su array int []. – rishimaharaj

+2

Basta essere avvisati che funzionerà solo sugli array _sorted_ 'int []', che gli esempi che descrivi non sono. –

+0

@LouisWasserman Non ricevo il tuo commento e i voti ottenuti. 'indexOf'" Restituisce l'indice della prima occorrenza dell'elemento specificato in questo elenco, o -1 se questo elenco non contiene l'elemento. " - allora perché non dovrebbe funzionare per array arbitrari? – arekolek

risposta

20

Dovrebbe essere Integer [] non int [] per farlo funzionare.

Integer[] A = {3,8,2,5,1,4,7,9}; 
final int i = Arrays.asList(A).indexOf(3); 
System.out.println("i = " + i); // prints '0' 
30

Arrays.asList(A) restituisce un List<int[]>. Questo perché si aspetta una matrice di oggetti, non di tipi primitivi. Le opzioni includono:

  • uso Integer[] invece di int[]
  • linea la matrice, e lasciare che autoboxing prende cura di esso; Arrays.asList(3,8,2,5,1,4,7,9) funzionerà correttamente
  • utilizza il metodo Guava'sInts.asList(int...) per visualizzare l'array primitivo come List<Integer>. (Divulgazione: contribuisco a Guava.)
  • usa Guava's Ints.indexOf(int[], int), che funziona direttamente su array primitivi.
1

farlo in questo modo

Integer[] array = {3,8,2,5,1,4,7,9}; 
List<Integer> list = Arrays.asList(array); 

System.out.println(list.indexOf(8)); 

asList torna static <T> List<T> dove T non può essere primitiva (int []).

Problemi correlati