Класс Java WeakHashMap: Руководство для начинающих

Введение

Приветствуем, будущие программисты на Java! Сегодня мы погружаемся в увлекательный мир WeakHashMap в Java. Не волнуйтесь, если вы никогда не слышали об этом раньше – мы начнем с самого начала и постепенно развиваться. К концу этого урока вы станете экспертом по WeakHashMap!

Java - WeakHashMap

Что такое WeakHashMap?

Представьте себе, что вы организуете большую вечеринку и у вас есть список гостей. Но это не просто список гостей – это магический список, который автоматически удаляет людей, которые больше не смогут прийти. Это несколько похоже на то, что делает WeakHashMap в Java, но с объектами вместо гостей на вечеринке!

WeakHashMap – это особый тип Map в Java, который позволяет ключам быть собраным мусором, когда они больше не используются в вашей программе. Это может быть очень полезно, когда вы хотите создать кэш, который не мешает объектам быть уничтоженными, когда они больше не нужны.

Объявление класса

Давайте начнем с объявления WeakHashMap:

import java.util.WeakHashMap;

public class WeakHashMapExample {
public static void main(String[] args) {
WeakHashMap<String, Integer> myWeakMap = new WeakHashMap<>();
}
}

В этом примере мы создаем WeakHashMap, который использует объекты String в качестве ключей и объекты Integer в качестве значений. Часть <String, Integer> называется "generics" – это как указание Java, какие типы объектов мы хотим хранить в нашем карте.

Конструкторы класса

WeakHashMap имеет четыре различных конструктора. Давайте рассмотрим каждый из них:

  1. Дефолтный конструктор:

    WeakHashMap<String, Integer> map1 = new WeakHashMap<>();

    Это создает пустую WeakHashMap с дефолтной начальной емкостью (16) и коэффициентом нагрузки (0.75).

  2. Конструктор с начальной емкостью:

    WeakHashMap<String, Integer> map2 = new WeakHashMap<>(100);

    Это создает WeakHashMap с указанной начальной емкостью и дефолтным коэффициентом нагрузки.

  3. Конструктор с начальной емкостью и коэффициентом нагрузки:

    WeakHashMap<String, Integer> map3 = new WeakHashMap<>(100, 0.8f);

    Это создает WeakHashMap с указанной начальной емкостью и коэффициентом нагрузки.

  4. Конструктор с другой Map:

    Map<String, Integer> existingMap = new HashMap<>();
    existingMap.put("Alice", 25);
    existingMap.put("Bob", 30);
    WeakHashMap<String, Integer> map4 = new WeakHashMap<>(existingMap);

    Это создает WeakHashMap с такими жеappings, как и в указанной карте.

Методы класса

WeakHashMap предоставляет несколько методов для манипуляции и доступа к его содержимому. Вот таблица некоторых из наиболее часто используемых методов:

Метод Описание
put(K key, V value) Добавляет пару ключ-значение в карту
get(Object key) Возвращает значение, связанное с указанным ключом
remove(Object key) Удаляет mapping для указанного ключа
size() Возвращает количество пар ключ-значение в карте
clear() Удаляет все mappings из карты
containsKey(Object key) Возвращает true, если карта содержит указанный ключ
containsValue(Object value) Возвращает true, если карта содержит указанное значение
isEmpty() Возвращает true, если карта не содержит пар ключ-значение

Давайте посмотрим на некоторые из этих методов в действии:

WeakHashMap<String, Integer> ageMap = new WeakHashMap<>();

// Добавление пар ключ-значение
ageMap.put("Alice", 25);
ageMap.put("Bob", 30);
ageMap.put("Charlie", 35);

// Получение значения
System.out.println("Возраст Alice: " + ageMap.get("Alice")); // Вывод: Возраст Alice: 25

// Проверка существования ключа
System.out.println("Содержит ли карта David? " + ageMap.containsKey("David")); // Вывод: Содержит ли карта David? false

// Удаление пары ключ-значение
ageMap.remove("Bob");
System.out.println("Размер карты после удаления Bob: " + ageMap.size()); // Вывод: Размер карты после удаления Bob: 2

// Очистка карты
ageMap.clear();
System.out.println("Пуста ли карта? " + ageMap.isEmpty()); // Вывод: Пуста ли карта? true

Наследуемые методы

WeakHashMap наследует методы от своих родительских классов и интерфейсов. Вот некоторые важные наследуемые методы:

Наследуется от Методы
java.util.AbstractMap clone(), equals(), hashCode(), toString()
java.util.Map entrySet(), keySet(), values()
java.lang.Object finalize(), getClass(), notify(), notifyAll(), wait()

Пример добавления пары ключ-значение в WeakHashMap с парами Integer, Integer

Теперь давайте посмотрим на более полный пример использования WeakHashMap с ключами и значениями Integer:

import java.util.WeakHashMap;

public class WeakHashMapExample {
public static void main(String[] args) {
WeakHashMap<Integer, Integer> squareMap = new WeakHashMap<>();

// Добавление пар ключ-значение
for (int i = 1; i <= 5; i++) {
squareMap.put(i, i * i);
}

System.out.println("Исходная карта: " + squareMap);

// Доступ к значениям
System.out.println("Квадрат 3: " + squareMap.get(3));

// Удаление пары ключ-значение
squareMap.remove(2);
System.out.println("Карта после удаления 2: " + squareMap);

// Проверка существования ключа
System.out.println("Содержит ли карта 4? " + squareMap.containsKey(4));

// Проверка существования значения
System.out.println("Содержит ли карта значение 16? " + squareMap.containsValue(16));

// Итерация по карте
System.out.println("Итерация по карте:");
for (Integer key : squareMap.keySet()) {
System.out.println("Ключ: " + key + ", Значение: " + squareMap.get(key));
}
}
}

Вывод

При выполнении этого кода вы увидите вывод, аналогичный этому:

Исходная карта: {5=25, 4=16, 3=9, 2=4, 1=1}
Квадрат 3: 9
Карта после удаления 2: {5=25, 4=16, 3=9, 1=1}
Содержит ли карта 4? true
Содержит ли карта значение 16? true
Итерация по карте:
Ключ: 5, Значение: 25
Ключ: 4, Значение: 16
Ключ: 3, Значение: 9
Ключ: 1, Значение: 1

И вот и все! Вы только что сделали свои первые шаги в мире WeakHashMap в Java. Помните, что настоящая сила WeakHashMap заключается в его способности позволять ключам быть собраными мусором, когда они больше не используются в вашей программе. Это может быть чрезвычайно полезно в определенных сценариях, таких как реализация кэшей или управление временными данными.

Как вы продолжаете свое путешествие по Java, вы обнаружите все больше и больше ситуаций, где WeakHashMap может стать ценным инструментом в вашей программистской утилитарке. Упражняйтесь, исследуйте и, что самое важное, наслаждайтесь программированием!

Credits: Image by storyset