Почему 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 ответа:
Он должен быть
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'
Arrays.asList(A)
возвращает aList<int[]>
. Это происходит потому, что он ожидает массив объектов, а не примитивные типы. Ваши варианты включают:
- используйте
Integer[]
вместоint[]
- встроить массив, и пусть autoboxing позаботится о нем;
Arrays.asList(3,8,2,5,1,4,7,9)
будет работать нормально- используйте гуаву.
Ints.asList(int...)
метод для просмотра примитивного массива в видеList<Integer>
. (Раскрытие: я делаю вклад в гуаву.)- используйте Guava
Ints.indexOf(int[], int)
, который работает непосредственно на примитивных массивах.