Почему indexOf не может найти объект? - PullRequest
31 голосов
/ 02 апреля 2012

Я создал список целых чисел и пытаюсь вернуть индекс определенного значения. Массив 3,8,2,5,1,4,7,6, и я хочу вернуть indexOf (3), который должен быть 0.

Я попробовал следующее в Eclipse Java Scrapbook после импорта java.util. *:

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

Я также пробовал:

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

Оба возвращают -1. Зачем? Как заставить это работать как ожидалось?

Ответы [ 3 ]

34 голосов
/ 02 апреля 2012

Arrays.asList(A) возвращает List<int[]>. Это потому, что он ожидает массив объектов, а не примитивных типов. Ваши варианты включают:

  • используйте Integer[] вместо int[]
  • встроить массив, и пусть автобокс заботится о нем; Arrays.asList(3,8,2,5,1,4,7,9) будет работать нормально
  • используйте метод Guava Ints.asList(int...) для просмотра массива примитивов как List<Integer>. (Раскрытие: я помогаю Гуаве.)
  • используйте Guava's Ints.indexOf(int[], int), который работает непосредственно с примитивными массивами.
26 голосов
/ 02 апреля 2012

Это должно быть Integer[], а не int[], чтобы заставить его работать.

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'
2 голосов
/ 02 апреля 2012

Сделайте это следующим образом

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

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

asList возвращает static <T> List<T> Где T не может быть примитивным (int []).

...