Список с массивом примитивов и Список с массивом объектов - PullRequest
1 голос
/ 11 апреля 2019

У меня есть следующий фрагмент кода для замены.

public static <E> void swap(List<E> list, int i, int j){
        E temp = list.get(i);
        list.set(i, list.get(j));
        list.set(j, temp);
}

Теперь, когда я использую List с массивом Integer, как показано ниже

Integer[] ar = new Integer[]{1,2};      
swap(Arrays.asList(ar),1,0);

Работает нормально и выдает вывод [2,1] Но я использую List с массивом int, как показано ниже

int[] ar = new int[]{1,2};
swap(Arrays.asList(ar),1,0);

Выдает исключение ArrayIndexOutOfBounds. Я не понимаю, почему это происходит. Список должен обрабатывать элемент int только как объект. Маленькая помощь, пожалуйста.

1 Ответ

2 голосов
/ 11 апреля 2019

Вот что происходит.Ваш текущий код фактически создает List<Object>, который содержит только один int[], а не список действительных целых чисел:

int[] ar = new int[]{1,2};
List<Object> list = Arrays.asList(ar);

Причина исключения ArrayIndexOutOfBounds заключается в том, что списоквы передаете методу swap только одну запись с индексом ноль.

В любом случае невозможно использовать Arrays.asList для прямого преобразования массива примитивов в список некоторых штучных упаковок.тип.Первая версия вашего кода правильная, и вы должны ее использовать:

Integer[] ar = new Integer[] {1, 2};
swap(Arrays.asList(ar), 1, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...