Этот вопрос уже имеет ответ здесь:
Я знаю, что можно инициализировать массив во время инстанцирования следующим образом:
String[] names = new String[] {"Ryan", "Julie", "Bob"};
Существует ли способ сделать то же самое с ArrayList? Или я должен добавить содержание индивидуально с array.add()
?
new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21));
Да.
new ArrayList<String>(){{
add("A");
add("B");
}}
На самом деле, это создание класса, производного от ArrayList
(внешний набор скобок делает это), а затем объявление статического инициализатора (внутренний набор скобок). На самом деле это внутренний класс содержащего класса, и поэтому у него будет неявный указатель this
. Это не проблема, если только вы не хотите его сериализовать или не ожидаете, что внешний класс будет собираться в мусор.
Я понимаю, что Java 7 предоставит дополнительные языковые конструкции, чтобы сделать именно то, что вы хотите.
EDIT: последние версии Java предоставляют более удобные функции для создания таких коллекций, и их стоит рассмотреть в сравнении с вышеприведенными (предоставленными в период до этих версий)
.Ну, в Java нет буквального синтаксиса для списков, поэтому вам придется делать .add().
Если у вас много элементов, это немного многословно, но вы можете либо:
2 будет выглядеть примерно так:
String[] elements = new String[] {"Ryan", "Julie", "Bob"};
List list = new ArrayList(Arrays.asList(elements));
Однако это приводит к созданию ненужных объектов.
Вот самое близкое, что вы можете получить:
ArrayList<String> list = new ArrayList(Arrays.asList("Ryan", "Julie", "Bob"));
Вы можете пойти еще проще:
List<String> list = Arrays.asList("Ryan", "Julie", "Bob")
Если посмотреть на исходный текст Arrays.asList, то он создает ArrayList, но по умолчанию приводится к List. Поэтому можно сделать так (но не надежно для новых JDK):
ArrayList<String> list = (ArrayList<String>)Arrays.asList("Ryan", "Julie", "Bob")