JavaRush /Курси /JAVA 25 SELF /«Свій словник» — HashMap&l...

«Свій словник» — HashMap<K,V>

JAVA 25 SELF
Рівень 12 , Лекція 2
Відкрита

1. Вступ

Ми вже знаємо, що ArrayList — це «нескінченний масив», який сам розширюється. Але у нього є одне обмеження: доступ до елементів здійснюється за індексом. Якщо в нас є список з тисячі людей і ми хочемо знайти телефон Аліси, доведеться або знати її індекс, або перебирати всіх поспіль.

У житті ми часто шукаємо дані за унікальною ознакою:

  • за імʼям шукаємо номер телефону,
  • за номером паспорта шукаємо власника,
  • за логіном знаходимо пароль,
  • за ID шукаємо обʼєкт у базі.

Для цього потрібна структура, яка вміє: «отримавши ключ → одразу знайти значення». У Java за це відповідає HashMap<K,V>.

Аналогія:
Уявіть звичайний паперовий словник. Ви шукаєте переклад слова «house». Вам не потрібно гортати всі сторінки підряд. Ви одразу переходите на літеру «H» і знаходите потрібне слово. Так само працює й HashMap: за ключем (слово) ми миттєво отримуємо значення (переклад).

Створення словника

Щоб створити словник, треба вказати, які типи будуть ключами і значеннями.

import java.util.HashMap;

HashMap<String, String> phonebook = new HashMap<String, String>();

Тут:

  • String (перший тип) — це тип ключа (імʼя людини).
  • String (другий тип) — це тип значення (номер телефону).

Тепер phonebook — це як справжня телефонна книга.

Приклади інших варіантів:

HashMap<String, Integer> grades = new HashMap<String, Integer>();  // імʼя → оцінка
HashMap<Integer, String> users = new HashMap<Integer, String>();   // ID → імʼя
HashMap<String, Boolean> flags = new HashMap<String, Boolean>();   // ключ → логічне значення

На відміну від ArrayList, у словника немає методу add(), натомість є свої не менш цікаві методи.

2. Метод put(key, value) — додати пару

Головна відмінність HashMap від масивів і списків полягає в тому, що він зберігає не просто набір значень, а пари ключ–значення. Це робить його схожим на справжній словник: у кожного слова є переклад, у кожного імені — телефон, у кожного логіна — пароль.

Приклад:

phonebook.put("Аліса", "+380501112233");
phonebook.put("Боб", "+380671234567");

Тепер у нашій телефонній книзі:

  • ключ "Аліса" повʼязаний зі значенням "+380501112233",
  • ключ "Боб" повʼязаний зі значенням "+380671234567".

Це означає, що для отримання значення (телефону) потрібно знати ключ (імʼя).

Важливо памʼятати: ключі унікальні. Якщо ми спробуємо додати нове значення за вже існуючим ключем, старе значення буде перезаписане.

phonebook.put("Аліса", "+10999999999");

Тепер в Аліси залишився лише новий номер; старий втрачено.

Висновок: put — це метод для додавання або оновлення записів. Якщо ключ новий — запис створюється. Якщо ключ уже є — запис оновлюється.

3. Метод get(key) — отримати значення

Щоб знайти значення, треба знати ключ. Це і є головна перевага HashMap: пошук за ключем працює дуже швидко, майже миттєво, незалежно від того, чи маємо тисячу записів, чи мільйон.

Приклад:

System.out.println(phonebook.get("Аліса"));

Виведення:

+380501112233

Якщо такого ключа немає, get поверне null:

System.out.println(phonebook.get("Чарлі")); // null

Це означає: «ключа "Чарлі" у словнику немає».

4. Метод containsKey(key) — перевірити наявність

Щоб не натрапити на null, корисно спочатку перевірити, чи є ключ у словнику.

Приклад:

System.out.println(phonebook.containsKey("Чарлі"));

Виведення:

false

Таким чином, ми можемо заздалегідь зрозуміти:

  • якщо ключа немає — створюємо новий запис,
  • якщо ключ є — оновлюємо його.

Поширений прийом:

if (phonebook.containsKey("Аліса")) 
{
    System.out.println("У Аліси вже є номер!");
} 
else 
{
    phonebook.put("Аліса", "+10111111111");
}

5. Метод remove(key) — видалити запис

Видалення працює так само просто: треба знати лише ключ.

phonebook.remove("Боб");
System.out.println(phonebook.get("Боб"));

Виведення:

null

Тепер запису з ключем "Боб" у словнику більше немає.

6. Перебирання всіх пар

Часто потрібно не лише отримати дані за конкретним ключем, а й вивести увесь словник цілком. Для цього використовується метод entrySet().

for (var entry : phonebook.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

Приклад виведення:

Аліса -> +380501112233

Таким чином, ми одразу отримуємо доступ і до ключа (entry.getKey()), і до значення (entry.getValue()).

7. Практика: підрахунок слів

Розгляньмо класичну задачу — підрахунок кількості повторів слів у тексті. Це один із найяскравіших прикладів, навіщо взагалі потрібен HashMap.

String text = "java java core java";
HashMap<String, Integer> freq = new HashMap<String, Integer>();

for (String w : text.split(" ")) 
{
    Integer old = freq.get(w);
    freq.put(w, (old == null) ? 1 : old + 1);
}

System.out.println(freq);

Виведення:

{core=1, java=3}

Розберімо докладно, що тут відбувається:

  1. Ми розбили рядок "java java core java" на слова.
  2. Для кожного слова дивимося, чи є воно вже у словнику (freq.get(w)).
  3. Якщо його немає (null), отже, це перша поява слова → кладемо 1.
  4. Якщо є, отже, слово вже траплялося → збільшуємо значення на одиницю.

Реальні застосування:

  • підрахунок кількості звернень до API,
  • статистика частоти слів у тексті,
  • зберігання кількості товарів на складі.

8. Практика: телефонна книга

Напишімо трохи більший застосунок.

import java.util.HashMap;
import java.util.Scanner;

public class PhonebookApp {
    public static void main(String[] args) 
    {
        HashMap<String, String> phonebook = new HashMap<String, String>();
        Scanner console = new Scanner(System.in);

        while (true) 
        {
            System.out.print("Введіть імʼя (або порожній рядок для виходу): ");
            String name = console.nextLine();
            if (name.isEmpty()) break;

            System.out.print("Введіть номер: ");
            String phone = console.nextLine();

            phonebook.put(name, phone);
        }

        System.out.println("Телефонна книга:");
        for (var entry : phonebook.entrySet()) 
        {
            System.out.println(entry.getKey() + " -> " + entry.getValue());
        }
    }
}

Програма працює як міні‑довідник. Ви вводите імена та телефони — вони зберігаються у HashMap. Наприкінці можна вивести весь список. Словники дуже часто використовуються в реальних проєктах.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ