Попытка преобразовать массив int в список с помощью Arrays.asList дает неправильное значение

Итак, я пытаюсь преобразовать (примитивный) массив int в список,

            for(int i=0;i<limit;i++) {
                arr[i]=sc.nextInt();
            }
            List list=Arrays.asList(arr);
            System.out.print(list);

При этом печатаются такие значения, как, например, [[I@59a6e353] . Есть возможность добавить <Integer> перед списком переменных, но, поскольку массив является примитивным целым числом, это невозможно. Есть ли какое-нибудь решение для этого? Добавление <int[]> перед списком переменных не вариант, так как мне нужно вызвать ограниченный метод подстановочных знаков.

не печатать список, печатать содержимое списка. Списки не имеют реализации для toString, поэтому следует ожидать вашего результата.

Stultuske 17.05.2022 08:55

Используйте System.out.print(Arrays.toString(list))

Jhanzaib Humayun 17.05.2022 08:56

@Stultuske печать содержимого списка дает тот же результат.

Rakkun 17.05.2022 08:57

@Rakkun, в таком случае, как ты пытался распечатать контент?

Stultuske 17.05.2022 08:59

@Stultuske for (Object i: list) { System.out.println (i); }

Rakkun 17.05.2022 09:01
<int[]> List<int[]> java.util.Arrays.asList(int[]... a) вы конвертируете массив в список int[]
XtremeBaumer 17.05.2022 09:03

@JhanzaibHumayun пробовал это, но ide предупреждает, что метод toString(long[]) в типе Arrays неприменим для аргументов (List), хотя для объекта[] тоже есть такой же метод.

Rakkun 17.05.2022 09:04

@Rakkun это потому, что вы заставляете его использовать реализацию toString класса Object, почему вы так удивлены, что он использует реализацию toString класса Object?

Stultuske 17.05.2022 09:05

@XtremeBaumer, это вариант, но мне нужно вызвать (ограниченный) метод подстановочных знаков, который я не могу вызвать, если попытаюсь добавить <int[]>

Rakkun 17.05.2022 09:05

Проблема в том, что у вас есть массив примитивного типа int. Arrays.asList() не может преобразовать его в List<Integer> (List<int> недопустимо). Вам нужно либо иметь массив Integer[], либо использовать другой метод для преобразования int[] в List<Integer>

XtremeBaumer 17.05.2022 09:08

@XtremeBaumer да, это решило мой вопрос.

Rakkun 17.05.2022 09:10

если у вас уже есть массив int[]: List<Integer> list = IntStream.of(array).boxed().toList() - Кстати, рекомендуется не использовать необработанные типы! JLS 4.8: "Использование необработанных типов разрешено только в качестве уступки совместимости с устаревшим кодом. Использование необработанных типов в коде, написанном после введения обобщений в язык программирования Java, настоятельно не рекомендуется. Вполне возможно, что в будущих версиях языка программирования Java будет запрещено использование необработанных типов."

user16320675 17.05.2022 09:22

@user16320675 user16320675 да, похоже, Java действительно не одобряет использование необработанных примитивных типов в дженериках.

Rakkun 17.05.2022 09:41
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
13
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Сигнатура метода Arrays.asList следующая:

public static <T> List<T> asList(T... a);

Вы можете видеть, что ему нужен массив дженериков T на входе.

Поэтому вы можете передать массив Integer, и это сработает. Пример:

List<Integer> list= Arrays.asList(new Integer[] {1,2,3,4});
System.out.print(list);

Выход:

[1, 2, 3, 4]

Если вы пройдете int[], вы можете получить только List<int[]>, потому что int — это примитивный тип, и его нельзя использовать в качестве универсального. Пример:

List<int[]> list= Arrays.asList(new int[] {1,2,3,4});
System.out.print(list);

Выход:

[[I@6b1274d2]

Предлагаю вам прочитать ответ в этом вопрос.

Ответ принят как подходящий

Arrays.asList(arr) создает не List<Integer>, а List<int[]> с одним элементом (вашим arr). Вы должны объявить свою переменную как Integer[] arr, если вам нужно использовать «Arrays.asList».

Другие вопросы по теме