2014-01-27 10 views
3

я могу addAll элементы массива в с ArrayList следующими двумя способами,Добавление Массивы в к ArrayList

Во-первых,

List<String> list1 = new ArrayList<String>(); 
list1.addAll(Arrays.asList("23,45,56,78".split(","))); 
System.out.println(list1); 

Во-вторых,

List<String> list2 = new ArrayList<String>(); 
list2.addAll(new ArrayList<String>(Arrays.asList("23,45,56,78".split(",")))); 
System.out.println(list2); 

И работает отлично. И мой вопрос: есть ли разница между этими двумя. И какой из них можно использовать для лучшей практики? Почему?

ответ

6

Оба подхода дают одинаковый результат, поэтому в этом отношении они эквивалентны.

Второй, однако, расточительный. Arrays.asList делает не выделяет дополнительную память - он просто обертывает данный массив в API-интерфейсе List. С другой стороны, создание new ArrayList выделяет, хотя и временно, другой массив с одинаковым размером и копирует все значения из исходного массива во внутренний массив реализации ArrayList.

С небольшими массивами сомнительно, что вы заметили разницу, но первый подход определенно более эффективен.

2

addAll method определен на интерфейсе Collection. В обоих примерах вы проходите в List. Во втором примере вы не сохраняете ArrayList, но это даже не нужно. Arrays.asList отправляет List просто штрафом в размере addAll сам по себе. Создание ненужного ArrayList во втором примере не нужно, поэтому предпочтительным является первый пример.

2

Из двух перечисленных вами, в первую очередь, лучше. Второй пример создает еще один объект ArrayList, который не нужен. Оба будут функционально одинаковыми, но первый будет более эффективным.

Как лучшей практике, вы можете сделать такого рода вещи в 1 строке, а не 2.

List<String> list2 = new ArrayList<String>(Arrays.asList("23,45,56,78".split(","))); 

Вы можете создать список, передавая аргументы в это конструктор, немного чище, чем вызова .addAll после создания объекта

Смежные вопросы