Класс 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 имеет четыре различных конструктора. Давайте рассмотрим каждый из них:
-
Дефолтный конструктор:
WeakHashMap<String, Integer> map1 = new WeakHashMap<>();
Это создает пустую WeakHashMap с дефолтной начальной емкостью (16) и коэффициентом нагрузки (0.75).
-
Конструктор с начальной емкостью:
WeakHashMap<String, Integer> map2 = new WeakHashMap<>(100);
Это создает WeakHashMap с указанной начальной емкостью и дефолтным коэффициентом нагрузки.
-
Конструктор с начальной емкостью и коэффициентом нагрузки:
WeakHashMap<String, Integer> map3 = new WeakHashMap<>(100, 0.8f);
Это создает WeakHashMap с указанной начальной емкостью и коэффициентом нагрузки.
-
Конструктор с другой 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