🧑💻 Когда выбрать EnumMap вместо HashMap
В стандартной библиотеке Java есть множество реализаций Map, но когда в качестве ключей используются значения перечислений (enum), оптимальным выбором будет именно EnumMap.
🔹 Логика выбора коллекции
▪️ HashMap — универсальный ключ-значение, хранит что угодно, но тратит память на hashCode.
▪️ TreeMap — ключи в отсортированном порядке, но медленнее.
▪️ LinkedHashMap — хранит порядок вставки.
▪️ EnumMap — заточен под enum-ключи, самый быстрый и компактный для этого случая.
🔹 Почему EnumMap крут
▪️ Использует массив под капотом, а не хеш-таблицу — значит, lookup работает за O(1) без вычисления хэшей.
▪️ Очень экономен по памяти (не хранит объекты Map.Entry).
▪️ Гарантированно хранит ключи в порядке объявления enum-констант.
🔹 Пример
✔️ Когда использовать
— Ключи всегда являются значениями одного enum.
— Важен быстрый доступ к элементам и сохранение порядка ключей.
— Необходимо минимизировать использование памяти.
❌ Когда не подходит
— Ключи не являются enum.
— Требуется поддержка null в качестве ключа.
💬 Расскажите про боевой кейс использования в комментах.
🐸 Библиотека джависта
#буст
В стандартной библиотеке Java есть множество реализаций Map, но когда в качестве ключей используются значения перечислений (enum), оптимальным выбором будет именно EnumMap.
🔹 Логика выбора коллекции
▪️ HashMap — универсальный ключ-значение, хранит что угодно, но тратит память на hashCode.
▪️ TreeMap — ключи в отсортированном порядке, но медленнее.
▪️ LinkedHashMap — хранит порядок вставки.
▪️ EnumMap — заточен под enum-ключи, самый быстрый и компактный для этого случая.
🔹 Почему EnumMap крут
▪️ Использует массив под капотом, а не хеш-таблицу — значит, lookup работает за O(1) без вычисления хэшей.
▪️ Очень экономен по памяти (не хранит объекты Map.Entry).
▪️ Гарантированно хранит ключи в порядке объявления enum-констант.
🔹 Пример
enum Status { NEW, IN_PROGRESS, DONE }
EnumMap<Status, String> map = new EnumMap<>(Status.class);
map.put(Status.NEW, "Создан");
map.put(Status.IN_PROGRESS, "В работе");
map.put(Status.DONE, "Завершён");
for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
— Ключи всегда являются значениями одного enum.
— Важен быстрый доступ к элементам и сохранение порядка ключей.
— Необходимо минимизировать использование памяти.
— Ключи не являются enum.
— Требуется поддержка null в качестве ключа.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3❤1
👑 Магия IntelliJ IDEA: Extract Method
Хотите быстро превратить кусок кода в чистый и переиспользуемый метод? Используйте хоткей — IDEA сама всё сделает за пару кликов.
Хоткей:
🔹 Что делает
Мгновенно выносит выделенный код в отдельный метод. IDEA сама предложит имя, подставит параметры и аккуратно заменит фрагмент вызовом нового метода.
🔹 Зачем это нужно
— Убирает «простыню» кода из метода.
— Улучшает читаемость и переиспользуемость.
— Ускоряет рефакторинг: не нужно руками писать сигнатуру, копировать аргументы и т.д.
🔹 Как использовать
— Выделите блок кода.
— Нажмите Ctrl + Alt + M.
— Проверьте, как IDEA сама создала метод.
— При желании поменяйте имя и модификатор доступа.
🔥 Работает не только с Java-кодом, но и в Kotlin, Groovy и даже в тестах.
🐸 Библиотека джависта
#буст
Хотите быстро превратить кусок кода в чистый и переиспользуемый метод? Используйте хоткей — IDEA сама всё сделает за пару кликов.
Хоткей:
Ctrl + Alt + M
(Cmd + Alt + M на macOS)🔹 Что делает
Мгновенно выносит выделенный код в отдельный метод. IDEA сама предложит имя, подставит параметры и аккуратно заменит фрагмент вызовом нового метода.
🔹 Зачем это нужно
— Убирает «простыню» кода из метода.
— Улучшает читаемость и переиспользуемость.
— Ускоряет рефакторинг: не нужно руками писать сигнатуру, копировать аргументы и т.д.
🔹 Как использовать
— Выделите блок кода.
— Нажмите Ctrl + Alt + M.
— Проверьте, как IDEA сама создала метод.
— При желании поменяйте имя и модификатор доступа.
🔥 Работает не только с Java-кодом, но и в Kotlin, Groovy и даже в тестах.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5❤1
При большом количестве компонентов в приложении Spring часто сталкивается с замедлением старта и повышенным потреблением памяти из-за инжекта зависимостей. Чтобы решить эту проблему, можно отложить создание бинов до момента их первого использования.
Для этого можно применить аннотацию @Lazy:
@Component
public class Component {
@Lazy
@Autowired
private Service service;
}
🔹 Когда использовать:
— В приложениях с большим количеством зависимостей
— Для сервисов, которые вызываются нечасто (например, отчёты или аналитика)
— В микросервисах для оптимизации потребления ресурсов
— При работе с тяжёлыми или сложными конфигурациями
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3❤1