ArrayLists и индексаторы в Java - PullRequest
5 голосов
/ 28 февраля 2010

Возможно ли сделать это на 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 #?

Спасибо

Ответы [ 6 ]

10 голосов
/ 28 февраля 2010

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

4 голосов
/ 28 февраля 2010

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

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

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

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

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

4 голосов
/ 28 февраля 2010
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 })); // это самое короткое решение

3 голосов
/ 28 февраля 2010

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

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

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

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

Если вы хотите изменить размер списка List, следующее, вероятно, самое короткое:

List<Integer> iAL = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
3 голосов
/ 28 февраля 2010

Кроме того, я бы добавил еще две заметки о вашем коде:

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

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

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

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

2 голосов
/ 28 февраля 2010

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

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

for (int i : iAL) {
  System.out.println(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...