Затраты на создание пустого массива? - PullRequest
1 голос
/ 25 февраля 2012

Чтобы преобразовать список в массив, вам нужен пустой массив, например:

List<Foo> fooList;
Foo[] foos = fooList.toArray(new Foo[0]);

Мне часто приходится использовать этот фрагмент кода, поэтому вместо создания пустого массива каждый раз я решил создать статический пустой массив и использовать его каждый раз. например,

private static Foo[] EMPTY_FOOS = new Foo[0];

List<Foo> fooList;
Foo[] foos = fooList.toArray(EMPTY_FOOS);

Это того стоит или мы смотрим на разницу в 0,00000000000000000000000000000000000000000000000000000000000000000001ms?

Ответы [ 3 ]

7 голосов
/ 25 февраля 2012

На самом деле я считаю, что это самая эффективная версия:

fooList.toArray(new Foo[fooList.size()]);

Таким образом, toArray() всегда имеет точный массив, и дополнительные массивы не создаются.IntelliJ предлагает такой рефакторинг из коробки.

2 голосов
/ 25 февраля 2012

На моем компьютере создание 100 000 000 Object[0] массивов занимает 2,9 секунды. Если вы создаете миллион массивов в секунду или даже 100 000, это может иметь ощутимое значение.

1 голос
/ 25 февраля 2012

Я думаю, что было бы более разумно задаться вопросом, зачем вам нужно конвертировать массивы в списки и наоборот.Вам лучше придерживаться классов Collection, если вы можете, и избегать использования массивов, поскольку они более подвержены ошибкам, чем классы Collection.

Если вы используете этот фрагмент кода «много», напишитеметод, который вы можете использовать повторно, но чтобы определить, какие усилия вы должны потратить на оптимизацию этого кода, вам нужно профилировать его и посмотреть, какие накладные расходы связаны с вашим другим кодом и как часто этот код фактически используется во время выполнения.

Как сказал Кнут, «преждевременная оптимизация - корень зла»: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...