Инициализация ArrayList, эквивалентная для выстраивания инициализации [дубликат]

Этот вопрос уже имеет ответ здесь:

Я знаю, что можно инициализировать массив во время инстанцирования следующим образом:

String[] names = new String[] {"Ryan", "Julie", "Bob"};

Существует ли способ сделать то же самое с ArrayList? Или я должен добавить содержание индивидуально с array.add()?

258
задан bluish 21 March 2013 в 23:38
поделиться

5 ответов

Здесь может помочь

Arrays.asList :

new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21));
336
ответ дан 23 November 2019 в 02:41
поделиться
Arrays.asList("Ryan", "Julie", "Bob");
25
ответ дан 23 November 2019 в 02:41
поделиться

Да.

new ArrayList<String>(){{
   add("A");
   add("B");
}}

На самом деле, это создание класса, производного от ArrayList (внешний набор скобок делает это), а затем объявление статического инициализатора (внутренний набор скобок). На самом деле это внутренний класс содержащего класса, и поэтому у него будет неявный указатель this. Это не проблема, если только вы не хотите его сериализовать или не ожидаете, что внешний класс будет собираться в мусор.

Я понимаю, что Java 7 предоставит дополнительные языковые конструкции, чтобы сделать именно то, что вы хотите.

EDIT: последние версии Java предоставляют более удобные функции для создания таких коллекций, и их стоит рассмотреть в сравнении с вышеприведенными (предоставленными в период до этих версий)

.
61
ответ дан 23 November 2019 в 02:41
поделиться

Ну, в Java нет буквального синтаксиса для списков, поэтому вам придется делать .add().

Если у вас много элементов, это немного многословно, но вы можете либо:

  1. использовать Groovy или что-то подобное
  2. использовать Arrays.asList(array)

2 будет выглядеть примерно так:

String[] elements = new String[] {"Ryan", "Julie", "Bob"};
List list = new ArrayList(Arrays.asList(elements));

Однако это приводит к созданию ненужных объектов.

8
ответ дан 23 November 2019 в 02:41
поделиться

Вот самое близкое, что вы можете получить:

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")
34
ответ дан 23 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: