Вступление
Хранилища значений ключей важны и часто используются, особенно в операциях, требующих быстрого и частого поиска. Они позволяют сопоставить объект - ключ - другому объекту, значению. Таким образом, значения можно легко получить, просмотрев ключ.
В Java наиболее популярной реализацией Map
является класс HashMap
Помимо сопоставления «ключ-значение», он используется в коде, который
требует частых вставок, обновлений и поисков. Время вставки и поиска -
это постоянная величина O (1).
В этом руководстве мы рассмотрим, как получить ключи и значения карты в Java .
Получение ключей и значений (записей) с карты Java
В большинстве случаев вы храните пары ключ-значение, потому что важны обе части информации. Таким образом, в большинстве случаев вы захотите собрать пару ключ-значение вместе.
Метод entrySet()
возвращает набор объектов Map.Entry<K, V>
которые
находятся на карте. Вы можете легко перебирать этот набор, чтобы
получить ключи и связанные с ними значения из карты.
Давайте HashMap
некоторыми значениями:
Map<String, Integer> map = new HashMap<>();
map.put("David", 24);
map.put("John", 35);
map.put("Jane", 19);
map.put("Billy", 21);
Теперь давайте переберем эту карту, пройдя по каждому Map.Entry<K,V>
в
entrySet()
и извлекая ключ и значение из каждой из этих записей:
for (Map.Entry<String, Integer> pair : map.entrySet()) {
System.out.println(String.format("Key (name) is: %s, Value (age) is : %s", pair.getKey(), pair.getValue()));
}
Это приводит к:
Key (name) is: Billy, Value (age) is: 21
Key (name) is: David, Value (age) is: 24
Key (name) is: John, Value (age) is: 35
Key (name) is: Jane, Value (age) is: 19
Получение ключей и значений (записей) с карты Java с помощью forEach ()
Java 8 знакомит нас с forEach()
для коллекций. Он принимает
BiConsumer<? super K, ? super V> action
. Метод forEach()
выполняет
заданное BiConsumer
для каждой записи HashMap
.
Давайте использовать ту же карту, что и раньше, но на этот раз добавим год к возрасту каждой записи:
map.forEach((key, value) -> System.out.println(key + " : " + value));
Это распечатывает:
Billy : 21
David : 24
John : 35
Jane : 19
Или вместо того, чтобы использовать каждый key
и value
из карты, вы
можете использовать обычного Consumer
и просто использовать целые
записи из entrySet()
:
map.entrySet()
.forEach((entry) -> System.out.println(entry.getKey() + " : " + entry.getValue()));
Это также приводит к:
Billy : 21
David : 24
John : 35
Jane : 19
Получите ключи с карты Java
Чтобы получить только ключи, если вам действительно не нужна информация из значений, вместо набора записей вы можете получить набор ключей:
for(String key: map.keySet()){
System.out.println(key);
}
Выход:
Billy
David
John
Jane
Получите значения из карты Java
Точно так же можно получить и перебрать только значения без ключей. Для
этого мы можем использовать values()
:
for(String value: map.values()){
System.out.println(value);
}
Выход:
21
54
35
19
Проверьте, есть ли на карте ключ
Класс HashMap
имеет containsKey()
, который проверяет, существует ли
переданный ключ в HashMap
, и возвращает логическое значение,
обозначающее наличие элемента или его отсутствие.
Проверим, существует ли ключ 5
:
boolean result = map.containsKey(5);
System.out.println(result);
Это распечатывает:
false
И для существующего ключа:
boolean result = map.containsKey("John");
System.out.println(result);
Это распечатывает:
true
Заключение
В этой статье мы рассмотрели несколько способов получения ключей и
значений (записей) карты в Java. Мы рассмотрели использование итератора
и прохождение каждого Map.Entry<K, V>
, а также использование
forEach()
как на самой карте, так и в ее наборе записей.
Наконец, мы рассмотрели, как получить набор ключей и значения по отдельности, и проверить, содержит ли карта данный ключ.