Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
03 Май 2023
2 мин
491

Инициализация HashMap в Java

Иногда при работе с Java возникает потребность инициализировать HashMap непосредственно при его объявлении. Хотелось бы сделать это примерно так: К сожалению,

Иногда при работе с Java возникает потребность инициализировать HashMap непосредственно при его объявлении. Хотелось бы сделать это примерно так:

Map<String,String> test = new HashMap<String, String>{"key1":"value1","key2":"value2"};

К сожалению, в Java такой синтаксис не поддерживается. Однако есть несколько альтернативных способов инициализировать HashMap непосредственно при объявлении.

Один из них — использование анонимного внутреннего класса:

Map<String, String> test = new HashMap<String, String>(){
    {
        put("key1", "value1");
        put("key2", "value2");
    }
};

Здесь создается анонимный внутренний класс, унаследованный от HashMap, и в нем сразу же инициализируются значения.

Такой способ имеет свои недостатки. Во-первых, он создает дополнительный класс для каждого экземпляра map, что может повлиять на производительность. Во-вторых, полученный таким образом map не может быть final.

Если важно, чтобы map был final, можно использовать статический блок инициализации:

public class Test {
    private static final Map<String, String> test;
    static {
        test = new HashMap<String, String>();
        test.put("key1", "value1");
        test.put("key2", "value2");
    }
}

Начиная с Java 8, можно также использовать методы Stream API для инициализации map:

Map<String, String> test = Stream.of(new String[][] {
    { "key1", "value1" },
    { "key2", "value2" },
}).collect(Collectors.toMap(data -> data[0], data -> data[1]));

Наконец, с появлением Java 9, появился еще один удобный способ инициализации map — это метод Map.of():

Map<String, String> test = Map.of("key1", "value1", "key2", "value2");

Однако стоит помнить, что такой map неизменяемый, и попытка добавить в него новые элементы приведет к исключению UnsupportedOperationException.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий