Класс WeakHashMap – это реализация интерфейса Map, в котором хранятся только слабые ссылки на его ключи. Хранение только слабых ссылок позволяет собрать пару с ключом-значением, когда его ключ больше не ссылается за пределы WeakHashMap.
Этот класс обеспечивает самый простой способ использовать силу слабых ссылок. Он полезен для реализации структур данных, подобных реестру, где утилита записи исчезает, когда ее ключ больше недоступен для любого потока.
Функции WeakHashMap в Java идентичны HashMap с одним очень важным исключением: если диспетчер памяти Java больше не имеет сильной ссылки на объект, указанный в качестве ключа, то запись на Map будет удалена.
Слабая ссылка. Если единственными ссылками на объект являются слабые ссылки, сборщик мусора может вернуть память объекта в любое время. Ему не нужно ждать, пока система исчерпает память. Обычно он будет освобожден при следующем запуске сборщика мусора.
Конструкторы
Ниже приведен список конструкторов, поддерживаемых классом WeakHashMap.
№ | Конструктор и описание |
1 | WeakHashMap() Этот конструктор создает новую, пустую WeakHashMap с начальной начальной емкостью (16) и коэффициентом загрузки по умолчанию (0.75). |
2 | WeakHashMap(int initialCapacity) Этот конструктор создает новую пустую WeakHashMap с заданной начальной емкостью и коэффициентом загрузки по умолчанию, который равен 0,75. |
3 | WeakHashMap(int initialCapacity, float loadFactor) Этот конструктор создает новую пустую WeakHashMap с заданной начальной емкостью и заданным коэффициентом загрузки. |
4 | WeakHashMap(Map t) Этот конструктор создает новый WeakHashMap с теми же сопоставлениями, что и указанный Map. |
Методы
Помимо методов, унаследованных от его родительских классов, TreeMap определяет следующие методы:
№ | Методы и описание |
1 | void clear() Удаляет все отображения с этого Map. |
2 | boolean containsKey(Object key) Возвращает true, если этот Map содержит отображение для указанного ключа. |
3 | boolean containsValue(Object value) Возвращает true, если этот Map отображает один или несколько ключей в указанное значение. |
4 | Set entrySet() Возвращает представление (вид) коллекции отображений, содержащихся в этом Map. |
5 | Object get(Object key) Возвращает значение, на котором указанный ключ отображается в этом WeakHashMap, или null (нуль), если Map не содержит сопоставления для этого ключа. |
6 | boolean isEmpty() Возвращает true, если этот Map не содержит отображений ключ-значение. |
7 | Set keySet() Возвращает Set представление (вид) ключей, содержащихся на этом Map. |
8 | Object put(Object key, Object value) Связывает указанное значение с указанным ключом на этой карте. |
9 | void putAll(Map m) Копирует все отображения с указанного Map на этот Map. Эти отображения заменят любые отображения, которые это отображение имело для любого из ключей, находящихся в настоящее время на указанном Map. |
10 | Object remove(Object key) Удаляет отображение этого ключа с этого Map, если оно присутствует. |
11 | int size() Возвращает количество отображений ключ-значение на этом Map. |
12 | Collection values() Возвращает представление (вид) коллекции значений, содержащихся на этом Map. |
Пример
Следующая программа демонстрирует работу нескольких методов, поддерживаемых WeakHashMap в Java:
import java.util.*;
public class WeakHashMap_Demo {
private static Map map;
public static void main (String args[]) {
map = new WeakHashMap();
map.put(new String("Брест"), "Минск");
Runnable runner = new Runnable() {
public void run() {
while (map.containsKey("Брест")) {
try {
Thread.sleep(500);
} catch (InterruptedException ignored) {
}
System.out.println("Ожидание потока");
System.gc();
}
}
};
Thread t = new Thread(runner);
t.start();
System.out.println("Главное ожидание");
try {
t.join();
} catch (InterruptedException ignored) {
}
}
}
Получим следующий результат:
Главное ожидание
Ожидание потока
Если вы не включили вызов System.gc(), система может никогда не запускать сборщик мусора, поскольку программа использует не так много памяти. Для более активной программы вызов будет ненужным.
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? :)
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc