Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Разница между Collections.emptyList() и ArrayList в Java

Быстрый ответ

При создании неизменяемого списка, который будет единственным в своём роде, лучше использовать Collections.emptyList(). Это обеспечивает высокую эффективность использования памяти и становится идеальным выбором для описания статичных, неизменяемых списков.

Java
Скопировать код
List<String> неизменяемыйПустойСписок = Collections.emptyList();

Если вам нужен изменяемый и расширяемый пустой список, лучший вариант — new ArrayList<>(), подобно пустому кошельку, готовому вместить средства.

Java
Скопировать код
List<String> расширяемыйПустойСписок = new ArrayList<>();

Выбор между Collections.emptyList() и ArrayList определяется конкретными требованиями к неизменности и вычислительной эффективности.

Кинга Идем в IT: пошаговый план для смены профессии

Глубокое погружение в неизменность

Разбор Collections.emptyList()

Метод Collections.emptyList() обеспечивает неизменяемость, увеличивая таким образом безопасность кода. Если список должен оставаться пустым, это наилучший вариант.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Изменяемость списка: право на модификации

В случае, когда требуется гибкость и возможность модифицировать список, стоит обратиться к новому экземпляру ArrayList.

Альтернатива: List.of()

С выходом Java 9 появился метод List.of(), создающий неизменяемый список с произвольным количеством элементов. Это хороший вариант создания неизменяемых списков, когда требуются не только пустые списки.

Взвешивание сценариев

Производительность: когда скорость имеет значение

Collections.emptyList() выделяется экономностью в использовании системных ресурсов и обеспечивает скрытый, но значимый профит в производительности при частом вызове метода.

Важность памяти

Collections.emptyList(), являясь синглтоном, не требует дополнительного выделения памяти в сравнении с new ArrayList<>(). Это может быть критично при ограниченных ресурсах памяти.

Точность в типизации

Если вы работаете с обобщёнными типами и вам нужен типизированный пустой список, Collections.<Foo>emptyList() будет наилучшим выбором.

Лучшие практики

Неизменяемые поля и возвращаемые типы

Для методов, возвращающих пустой список, и для неизменяемых полей в классах Collections.emptyList() является безопасным выбором.

Делаем залог на изменчивость

Если список в будущем может потребовать расширения, то new ArrayList станет универсальным решением.

Улучшение потокобезопасности

В контексте многопоточного выполнения, выбор в пользу Collections.emptyList() гарантирует безопасность и предсказуемость работы.

Визуализация

Представим ситуацию: идём в поход с пустым рюкзаком (🎒) для сувениров либо на лёгкую прогулку (🚶) без вещей:

Markdown
Скопировать код
Collections.emptyList()          new ArrayList<>()
Markdown
Скопировать код
Ситуация:       🚶                 🚶
Цели:           Осмотр витрин      Возможные покупки
Снаряжение:     Отсутствует (🚫🎒)    Пустой рюкзак (🎒)
// Осматриваем витрины с 'Collections.emptyList()', не планируя ничего приобретать.
// Берём пустой рюкзак с 'new ArrayList<>()', в случае возникновения нежданных покупок.

Выбирайте исходя из эффективности и целей:

Markdown
Скопировать код
| Сценарий                          | Выбор             |
| ----------------------------------| ----------------- |
| Без добавлений (только осмотр)    | 🚶(emptyList)     |
| С покупками (преобрести что-то)   | 🎒(new ArrayList) |

// emptyList для наблюдателя, new ArrayList для покупателя.

Полезные материалы

  1. java – Collections.emptyList() vs. new instance – Stack Overflow — дискуссия о выборе между Collections.emptyList() и созданием нового экземпляра.
  2. Collections (Java Platform SE 8 )официальная документация Java на Collections.emptyList().
  3. [Effective Java, 3rd Edition [Book]](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/) — культовая книга о лучших практиках программирования на Java.
  4. Understanding Java Collections Performance — анализ производительности коллекций в Java.
  5. Using Collections in Java — обзор, как выбрать правильную коллекцию в Java.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод следует использовать для создания неизменяемого пустого списка в Java?
1 / 5