2012-04-02 15 views
24

Utworzono listę całkowitą i próbuję zwrócić indeks określonej wartości. Tablica ma 3,8,2,5,1,4,7,6 i chcę zwrócić indexOf (3), który powinien wynosić 0.Dlaczego funkcja indexOf nie znajduje obiektu?

Próbowałem następujących rzeczy w Eclipse Java Scrapbook po zaimportowaniu java.util *.

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

próbowałem również:

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

Obaj wracają -1. Czemu? Jak sprawić, by działało zgodnie z oczekiwaniami?

+0

Dziękuję za odpowiedzi wszystkim. Przy tej zmianie musiałbym zmienić strukturę danych, więc zamiast tego użyję metody binarySearch, ponieważ będzie ona działać na tablicach int []. – rishimaharaj

+2

Ostrzegam, że to zadziała tylko na _sorted_ 'int []' tablicach, których przykłady, których opisujesz, nie są. –

+0

@LouisWasserman Nie dostaję twojego komentarza i zdobytych wiadomości. 'indexOf'" Zwraca indeks pierwszego wystąpienia określonego elementu z tej listy lub -1, jeśli ta lista nie zawiera tego elementu. " - dlaczego więc nie działa to dla arbitralnych macierzy? – arekolek

Odpowiedz

20

Powinna to być wartość Integer [] not int [], aby działała.

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

zwraca wartość List<int[]>. Dzieje się tak dlatego, że oczekuje on tablicy obiektów, a nie typów pierwotnych. Dostępne opcje to:

  • użycie Integer[] zamiast int[]
  • inline tablica, i niech autoboxing dbać o niego; Arrays.asList(3,8,2,5,1,4,7,9) będzie działać dobrze
  • użyć metody Guava'sInts.asList(int...) do wyświetlenia prymitywnej tablicy jako List<Integer>. (Ujawnienie: wnoszę wkład w Guava.)
  • używaj Guva Ints.indexOf(int[], int), który działa bezpośrednio na prymitywnych tablicach.
1

zrobić w ten sposób

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

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

asList zwraca static <T> List<T> Gdzie T nie może być prymitywny (int []).

Powiązane problemy