Класс WeakHashMap
Класс WeakHashMap - это реализация интерфейса Map,
в которой ключи хранятся в виде слабых ссылок (weak references).
Если на ключ больше не существует сильных ссылок, сборщик мусора
может удалить его, а вместе с ним и соответствующее значение
из карты. Это делает WeakHashMap полезным для кэшей,
где нужно автоматически освобождать память, когда ключи
становятся ненужными. В отличие от HashMap,
WeakHashMap не гарантирует, что порядок элементов
сохранится, и не является потокобезопасным.
Конструкторы класса:
-
WeakHashMap- создаёт пустую карту с начальной ёмкостью по умолчанию -
WeakHashMap(int initialCapacity)- создаёт пустую карту с заданной начальной ёмкостью -
WeakHashMap(int initialCapacity, float loadFactor)- создаёт пустую карту с заданной ёмкостью и коэффициентом загрузки -
WeakHashMap(Map m)- создаёт карту, содержащую те же отображения, что и указанная карта
Синтаксис
WeakHashMap<KeyType, ValueType> map = new WeakHashMap<>();
Пример
Давайте создадим WeakHashMap, добавим в неё несколько пар
«ключ-значение» и выведем содержимое на экран:
import java.util.WeakHashMap;
public class Main
{
public static void main(String[] args)
{
WeakHashMap<String, Integer> map = new WeakHashMap<>();
map.put("abcde", 1);
map.put("12345", 2);
map.put("qwerty", 3);
System.out.println(map);
}
}
Результат выполнения кода:
{abcde=1, 12345=2, qwerty=3}
Пример
Давайте получим значение по ключу и проверим наличие ключа в карте:
import java.util.WeakHashMap;
public class Main
{
public static void main(String[] args)
{
WeakHashMap<String, Integer> map = new WeakHashMap<>();
map.put("abcde", 1);
map.put("12345", 2);
System.out.println(map.get("abcde"));
System.out.println(map.containsKey("12345"));
System.out.println(map.containsKey("qwerty"));
}
}
Результат выполнения кода:
1
true
false
Пример
Давайте удалим элемент по ключу и выведем размер карты до и после:
import java.util.WeakHashMap;
public class Main
{
public static void main(String[] args)
{
WeakHashMap<String, Integer> map = new WeakHashMap<>();
map.put("abcde", 1);
map.put("12345", 2);
map.put("qwerty", 3);
System.out.println(map.size());
map.remove("12345");
System.out.println(map.size());
System.out.println(map);
}
}
Результат выполнения кода:
3
2
{abcde=1, qwerty=3}
Пример
Давайте посмотрим, как сборщик мусора удаляет ключи,
на которые больше нет сильных ссылок. После того как
переменная key станет null и будет вызван
System.gc, соответствующая запись может исчезнуть
из карты:
import java.util.WeakHashMap;
public class Main
{
public static void main(String[] args) throws InterruptedException
{
WeakHashMap<String, Integer> map = new WeakHashMap<>();
String key = new String("abcde");
map.put(key, 1);
map.put("12345", 2);
System.out.println(map);
key = null;
System.gc();
Thread.sleep(100);
System.out.println(map);
}
}
Результат выполнения кода (может отличаться в зависимости от JVM):
{abcde=1, 12345=2}
{12345=2}
Смотрите также
-
интерфейс
Map,
который представляет собой коллекцию пар «ключ-значение» -
метод
put,
который добавляет пару «ключ-значение» в карту -
метод
get,
который возвращает значение по ключу -
класс
WeakHashMap,
который хранит ключи в виде слабых ссылок