РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
418 of 1163 menu

Класс 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,
    который хранит ключи в виде слабых ссылок
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить