Почему indexOf не может найти объект?

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

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

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 ответов


Он должен быть!--1--> не 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'

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

  • использовать Integer[] вместо int[]
  • inline массив, и пусть autoboxing позаботится об этом;Arrays.asList(3,8,2,5,1,4,7,9) будет работать нормально
  • использовать гуава это Ints.asList(int...) метод для просмотра примитивного массива как List<Integer>. (Раскрытие: я вношу свой вклад в гуаву.)
  • использовать гуавы в Ints.indexOf(int[], int), которым работает непосредственно на примитивных массивах.

сделайте это так

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 []).