Перейти к основному содержимому

Создайте пустую карту в Java

· 5 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

В этой статье мы рассмотрим различные возможные способы инициализации пустой карты в Java.

Мы будем использовать Java 8, а также Java 9 для проверки различных способов.

2. Использование коллекций Java

Мы можем создать пустую карту , используя метод emptyMap() , предоставляемый модулем Java Collections. Это сформирует пустую карту , сериализуемую по своей природе. Этот метод был представлен в Java 1.5 в библиотеке коллекций. Это создаст неизменяемую карту :

Map<String, String> emptyMap = Collections.emptyMap();

Примечание. Поскольку созданная карта является неизменной по своей природе, она не позволит пользователю добавлять какие-либо записи или выполнять какие-либо изменения на карте . Это вызовет исключение java.lang.UnsupportedOperationException при попытке добавить или изменить любую пару ключ-значение в Map .

У нас есть еще два метода, которые поддерживают создание и инициализацию пустой карты . emptySortedMap () возвращает пустую SortedMap неизменяемого типа. Отсортированная карта — это та , которая обеспечивает дальнейшее полное упорядочение своих ключей. Карта , созданная этим методом, по своей природе сериализуема:

SortedMap<String, String> sortedMap = Collections.emptySortedMap();

Другой метод, предоставляемый коллекциями Java, — emptyNavigableMap() , который возвращает пустой NavigableMap . Он имеет те же свойства, что и пустая отсортированная карта . Единственная разница в том, что этот метод возвращает Map с возможностью навигации . Навигационная карта — это расширение традиционной реализации отсортированной карты , которая возвращает наиболее близкие совпадения для заданной цели поиска. ``

NavigableMap<String, String> navigableMap = Collections.emptyNavigableMap();

Все вышеперечисленные методы возвращают Карты , которые по своей природе неизменяемы, и мы не сможем добавлять новые записи в эти Карты . Это вызывает исключение UnsupportedOperationException при принудительной попытке добавить, удалить или изменить любые пары ключ-значение.

3. Использование класса карт Java

В некоторых случаях нам не нужна неизменяемая карта . Мы можем инициализировать изменяемую карту с помощью класса Maps :

Map<String, String> emptyMap = Maps.newHashMap();

Этот тип инициализации создает изменяемую Карту , т.е. мы можем добавлять записи в эту Карту . Но базовая инициализация этой Карты пуста и не содержит никаких записей.

Мы также можем инициализировать карту с определенными типами ключей и значений. Это создаст карту с предопределенным типом элементов и вызовет исключение, если оно не будет выполнено:

Map genericEmptyMap = Maps.<String, Integer>newHashMap();

Короче говоря, это создает пустую карту с ключом в виде строки и значением в виде целого числа. Пара угловых скобок, используемых для инициализации, известна как Diamond Syntax . Это создаст карту с аргументами определенного типа, которая вызывает конструктор класса Maps .

4. Инициализация карты с помощью конструкторов

Мы можем инициализировать Карты , используя конструкторы различных реализаций Карт , например HashMap, LinkedHashMap, TreeMap . Все эти инициализации создают пустую карту , в которую мы можем добавить записи позже, если это необходимо:

Map hashMap = new HashMap();
Map linkedHashMap = new LinkedHashMap();
Map treeMap = new TreeMap();

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

5. Способ Java 9 с Map.of()

Java 9 поставляется со многими новыми функциями, такими как частные методы интерфейса, анонимные классы, система модулей платформы и многие другие. Map.of () — это фабричный метод, представленный в версии Java 9. Этот метод возвращает неизменяемую карту , которая создает нулевые сопоставления. Интерфейс, предоставляемый этим методом, относится к Java Collections Framework . Map.of (key1, value1, key2, value2, …..) может иметь не более 10 пар ключ-значение.

Для инициализации пустой Map мы не будем передавать никакую пару ключ-значение в этом методе:

Map<String, String> emptyMapUsingJava9 = Map.of();

Этот фабричный метод создает неизменяемую карту , поэтому мы не сможем добавлять, удалять или изменять любую пару ключ-значение. Исключение UnsupportedOperationException возникает при попытке внести какие-либо изменения в карту после инициализации. . добавление или удаление пар ключ-значение также не поддерживается и приведет к возникновению вышеуказанного исключения.

Примечание. Метод Map.of() из Java 9 упрощает инициализацию неизменяемых карт с нужными парами ключ-значение.

6. Использование гуавы

До сих пор мы рассматривали различные способы инициализации пустой Карты с помощью ядра Java. Давайте продолжим и проверим, как инициализировать карту с помощью библиотеки Guava:

Map<String, String> articles = ImmutableMap.of();

Вышеупомянутый метод создаст неизменяемую пустую карту с использованием библиотеки Guava. Мы также можем создать изменяемую карту в гуаве, используя следующий синтаксис:

Map<String, String> emptyMapUsingGuava = Maps.newHashMap(ImmutableMap.of());

В заключение, приведенный выше метод создает пустую карту в Java. Мы можем добавлять записи на эту карту , поскольку она по своей природе изменчива.

ImmutableMap.of () также перегружает версии методов для создания карт с записями. Поскольку мы создаем пустую карту , нам не нужно передавать какие-либо параметры в скобках метода, чтобы использовать перегруженные методы.

7. Заключение

В этой статье мы рассмотрели различные способы инициализации пустой карты . Мы видим, что по сравнению с Java 9 в этой области произошли огромные улучшения. У нас есть новые фабричные методы для создания и инициализации Карт .

Как всегда, полный исходный код доступен на Github .