ArrayLists и индексаторы в Java

Действительно ли возможно сделать это в Java? Возможно, я использую неправильный синтаксис?

ArrayList<Integer> iAL = new ArrayList<Integer>();
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 }));

for (int i = 0; i < iAL.size(); ++i) {
    System.out.println(iAL[i]); //<-------- HERE IS THE PROBLEM
}

Кроме того, это возможный сделать что-то как

iAL.addAll( new int[] {1, 2, 3, 4, 5} );

как замечен на c#?

Спасибо

5
задан devoured elysium 28 February 2010 в 15:48
поделиться

6 ответов

Попробуйте System.out.println (iAL.get (i)); . Потому что это список , а не массив

10
ответ дан 18 December 2019 в 06:11
поделиться
ArrayList<Integer> iAL = new ArrayList<Integer>();
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 }));

for (int i = 0; i < iAL.size(); ++i) {
    System.out.println(iAL.get(i)); 
}

AFAIK

iAL.addAll (Arrays.asList (new Integer [] {1, 2, 3, 4, 5})); // это кратчайшее решение

4
ответ дан 18 December 2019 в 06:11
поделиться

Нет, вы должны использовать .get (i) ; [i] предназначен только для массивов. Однако, если вам не нужна индексная переменная для чего-то еще, предпочтительнее использовать синтаксис for-each (согласно ответу trashgod).

Во-вторых, если вы не изменяете размер списка (по-прежнему можно изменять отдельные элементы), было бы вполне разумно сделать следующее:

List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5);

Обратите внимание, что Arrays.asList () принимает параметр varargs, поэтому нет причин явно создавать массив.

Если вам нужен список с изменяемым размером, то, вероятно, самым коротким будет следующий:

List<Integer> iAL = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
3
ответ дан 18 December 2019 в 06:11
поделиться

Вдобавок я бы добавил еще два примечания к вашему коду:

Например, объединение нескольких полезных предложений из других ответов

List<Integer> list = new ArrayList<Integer>();
list.addAll(Arrays.asList(1, 2, 3, 4, 5 ));

for (Integer i : list) {
    System.out.println(i);
}

Приложение: Вопрос о кодировании интерфейса интересен, и комментарий Карла особенно уместен. Использование типа интерфейса List сводит к минимуму ваши обязательства по использованию конкретной реализации. Если возникнет необходимость, вы можете позже переключиться на любой класс , реализующий List .

3
ответ дан 18 December 2019 в 06:11
поделиться

Я проведу рефакторинг всего вашего кода так:

List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5 );

for (int i : iAL) {
  System.out.println(i);
}
2
ответ дан 18 December 2019 в 06:11
поделиться

Также, возможно ли сделать что-то вроде

iAL.addAll( new int[] {1, 2, 3, 4, 5} )

Достаточно близко:

iAL.addAll(Arrays.asList(1, 2, 3, 4, 5));

В вашем коде нет необходимости в new Integer[].

4
ответ дан 18 December 2019 в 06:11
поделиться