HashMap
Класс java.util.HashMap — это коллекция пар «ключ — значение» (key-value). По ключу можно очень быстро получить или изменить значение, не перебирая всю коллекцию. Это аналог словаря (dict) в Python или объектов в JavaScript.
HashMap<K, V> параметризуется двумя типами: K — тип ключа, V — тип значения. Ключи в HashMap уникальны: если положить новое значение по существующему ключу, старое будет заменено.
Внутри HashMap устроен как массив «корзин» (buckets). При добавлении пары вычисляется хеш-код ключа, и пара кладётся в соответствующую корзину. Поэтому операции put, get и containsKey в среднем работают за O(1).
Порядок хранения элементов в HashMap не гарантируется и может меняться. Если нужен порядок добавления — используйте LinkedHashMap.
Зачем нужен
быстро искать значение по уникальному ключу (имя → возраст, артикул → цена);
подсчитывать частоту вхождений (символ → сколько раз встретился);
хранить настройки в формате «параметр → значение»;
кешировать результаты по идентификатору.
Способы создания
import java.util.HashMap;
import java.util.Map;
HashMap<String, Integer> a = new HashMap<>();
HashMap<String, Integer> b = new HashMap<>(64); // начальная ёмкость
Map<String, Integer> c = Map.of("один", 1, "два", 2); // неизменяемая Map
Популярные методы
Метод |
Назначение |
|---|---|
|
добавить или заменить значение по ключу |
|
получить значение по ключу или |
|
значение или значение по умолчанию |
|
удалить пару по ключу |
|
есть ли такой ключ |
|
есть ли такое значение |
|
количество пар |
|
пуста ли карта |
|
множество всех ключей |
|
коллекция всех значений |
|
множество пар Entry |
|
удалить все элементы |
Примеры
Пример 1. Создание и добавление
import java.util.HashMap;
public class Demo1 {
public static void main(String[] args) {
HashMap<String, Integer> ages = new HashMap<>();
ages.put("Айдар", 12);
ages.put("Беку", 14);
ages.put("Дина", 11);
System.out.println("Возраст Беку: " + ages.get("Беку"));
System.out.println("Всего записей: " + ages.size());
}
}
Вывод:
Возраст Беку: 14
Всего записей: 3
Пример 2. Замена значения по существующему ключу
import java.util.HashMap;
public class Demo2 {
public static void main(String[] args) {
HashMap<String, Integer> prices = new HashMap<>();
prices.put("ручка", 100);
prices.put("тетрадь", 250);
prices.put("ручка", 120);
System.out.println(prices.get("ручка"));
System.out.println("Размер: " + prices.size());
}
}
Вывод:
120
Размер: 2
Пример 3. Проверка наличия ключа
import java.util.HashMap;
public class Demo3 {
public static void main(String[] args) {
HashMap<String, String> caps = new HashMap<>();
caps.put("Казахстан", "Астана");
caps.put("Россия", "Москва");
System.out.println(caps.containsKey("Казахстан"));
System.out.println(caps.containsKey("Япония"));
System.out.println(caps.getOrDefault("Япония", "неизвестно"));
}
}
Вывод:
true
false
неизвестно
Пример 4. Удаление по ключу
import java.util.HashMap;
public class Demo4 {
public static void main(String[] args) {
HashMap<String, Integer> stock = new HashMap<>();
stock.put("Arduino", 20);
stock.put("ESP32", 15);
stock.put("Raspberry", 5);
stock.remove("Raspberry");
System.out.println(stock.containsKey("Raspberry"));
System.out.println("Осталось: " + stock.size());
}
}
Вывод:
false
Осталось: 2
Пример 5. Перебор через entrySet
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Demo5 {
public static void main(String[] args) {
HashMap<String, Integer> scores = new HashMap<>();
scores.put("Айдар", 85);
scores.put("Беку", 92);
scores.put("Дина", 78);
// TreeMap для стабильного порядка вывода (по ключу)
for (Map.Entry<String, Integer> e : new TreeMap<>(scores).entrySet()) {
System.out.println(e.getKey() + " = " + e.getValue());
}
}
}
Вывод:
Айдар = 85
Беку = 92
Дина = 78
Пример 6. Подсчёт частоты символов
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Demo6 {
public static void main(String[] args) {
String text = "abracadabra";
HashMap<Character, Integer> freq = new HashMap<>();
for (char c : text.toCharArray()) {
freq.put(c, freq.getOrDefault(c, 0) + 1);
}
for (Map.Entry<Character, Integer> e : new TreeMap<>(freq).entrySet()) {
System.out.println(e.getKey() + ": " + e.getValue());
}
}
}
Вывод:
a: 5
b: 2
c: 1
d: 1
r: 2
Пример 7. Получение всех ключей и значений
import java.util.HashMap;
import java.util.TreeSet;
public class Demo7 {
public static void main(String[] args) {
HashMap<String, Integer> m = new HashMap<>();
m.put("a", 1);
m.put("b", 2);
m.put("c", 3);
System.out.println("Ключи: " + new TreeSet<>(m.keySet()));
int sum = 0;
for (int v : m.values()) sum += v;
System.out.println("Сумма значений: " + sum);
}
}
Вывод:
Ключи: [a, b, c]
Сумма значений: 6
Пример 8. Очистка карты
import java.util.HashMap;
public class Demo8 {
public static void main(String[] args) {
HashMap<Integer, String> m = new HashMap<>();
m.put(1, "один");
m.put(2, "два");
System.out.println("До: size=" + m.size() + ", empty=" + m.isEmpty());
m.clear();
System.out.println("После: size=" + m.size() + ", empty=" + m.isEmpty());
}
}
Вывод:
До: size=2, empty=false
После: size=0, empty=true
См. также
Примечание
Лицензия и источники
Техническое описание класса адаптировано из официальной Java API Documentation (https://docs.oracle.com/en/java/javase/), Oracle Free Documentation License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.