Sobes.tech
Назад к вопросам
Junior — Middle
68

Можете объяснить, как работает класс WeakHashMap в Java и в чем его отличие от обычной HashMap?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

Класс WeakHashMap в Java — это реализация интерфейса Map, где ключи хранятся с использованием слабых ссылок (WeakReference). Это значит, что если на ключ больше нет сильных ссылок в программе, то он может быть собран сборщиком мусора, и соответствующая пара ключ-значение автоматически удалится из карты.

Отличия от обычного HashMap:

  • В HashMap ключи и значения хранятся через сильные ссылки, поэтому объекты, используемые в качестве ключей, не удаляются сборщиком мусора, пока они находятся в карте.
  • В WeakHashMap ключи — слабые ссылки, что позволяет автоматически очищать карту от записей, ключи которых больше не используются в программе.

Пример использования:

import java.util.WeakHashMap;

public class WeakHashMapExample {
    public static void main(String[] args) {
        WeakHashMap<Object, String> map = new WeakHashMap<>();
        Object key = new Object();
        map.put(key, "value");

        System.out.println("Before nulling key: " + map);

        key = null; // Убираем сильную ссылку на ключ
        System.gc(); // Запрашиваем сборку мусора

        // Через некоторое время запись может быть удалена
        System.out.println("After GC: " + map);
    }
}

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