Программа Java для реализации API WeakHashMap
Класс WeakHashMap является частью Java Collections Framework, реализуя интерфейс Map и расширяя класс AbstractMap. Интерфейс Map помогает нам сопоставить ключи со значениями, а класс AbstractMap упрощает реализацию интерфейса Map.
Каждый ключ на карте должен быть уникальным и может объединяться максимум с одним значением. Обратите внимание, что карта сама по себе не может быть ключом. Порядок пар ключ-значение не гарантируется в WeakHashMap. Что отличает WeakHashMap от обычного HashMap, так это то, что WeakHashMap использует слабые ключи.
Сильная ссылка: Сильная ссылка - это тип ссылки, который обычно используется. Сборщик мусора не восстанавливает объекты, имеющие сильную ссылку.
Пример:
Компьютерщик strongRef = новый Компьютерщик ();
Слабая ссылка: если объект не имеет сильной или мягкой ссылки, говорят, что объект имеет слабую ссылку.
Пример:
новый Компьютерщик ();
An explicit weak reference can also be generated using the WeakReference class
Пример:
WeakReference <Geek> weakRef = новый WeakReference (новый Geek ()); // Теперь используем метод get () для получения объекта // weakRef.get ()
Наличие слабых ключей означает, что сборщик мусора удалит ключи, когда они больше не будут использоваться. С другой стороны, значения хранятся в сильных ссылках. Таким образом, объекты значений не должны напрямую ссылаться на свой ключ else; это предотвратит возврат ключа. WeakHashMap поддерживает нулевые ключи, а также значения.
Коэффициент загрузки: процент занятости, после которого емкость WeakHashMap удваивается. Например, если начальная емкость равна 16, а коэффициент загрузки составляет 0,75 (75%), то есть 12., то при добавлении 13-го элемента размер WeakHashMap удваивается.
Конструкторы: класс WeakHashMap предоставляет 4 конструктора:
1.WeakHashMap (): сгенерирует объект WeakHashMap с начальной емкостью 16 и коэффициентом загрузки 0,75.
Синтаксис:
WeakHashMap<K,V> wHM=new WeakHashMap<K,V>();
2.WeakHashMap (int InitialCapacity): это сгенерирует объект WeakHashMap с желаемым InitialCapacity и коэффициентом загрузки 0,75.
Синтаксис:
WeakHashMap <K, V> wHM = новый WeakHashMap <K, V> (20); // Это сгенерирует WeakHashMap // объект с начальной емкостью 20
3.WeakHashMap (int InitialCapacity, float LoadFactor): это сгенерирует объект WeakHashMap с желаемым InitialCapacity, а также коэффициентом загрузки.
Синтаксис:
WeakHashMap <K, V> wHM = новый WeakHashMap <K, V> (20,0.9); // Это сгенерирует объект WeakHashMap с // начальная мощность 20 и коэффициент загрузки 90%
4.WeakHashMap (карта карты): это сгенерирует объект WeakHashMap и скопирует все пары ключ-значение из указанной карты в процессе.
Синтаксис:
WeakHashMap <K, V> wHM = новый WeakHashMap <K, V> (oldMap); // Это сгенерирует объект WeakHashMap и // скопируем все сопоставления oldMap
Операции над WeakHashMap
Операции WeakHashMap можно разделить на деструктивные и неразрушающие. Деструктивные методы изменяют карту, на которой они действуют.
Разрушительные операции
1. Дополнение или обновление
Когда ключ вставляется в WeakHashMap, внутри происходит следующий процесс:
- Для этого ключа создается уникальный хэш-код.
- Этот хэш-код используется для генерации значения индекса
- Пара ключ-значение сохраняется в этом конкретном индексе в хеш-таблице.
A) public T put (K key, T value): вставляет заданную пару ключ-значение в WeakHashMap. Если ключ уже существует, значение обновляется. Этот метод возвращает предыдущее значение ключа. Если либо ключ вставляется впервые, либо предыдущее значение равно null, возвращается null.
B) public void putAll (Map m): вставляет все отображение из карты в текущую карту. Если какие-либо ключи являются общими, значение обновляется. Если указанная карта m имеет значение null, генерируется исключение NullPointerException.
2. Удаление
A) public void clear (): удаляет все сопоставления с карты.
B) public T remove (Object key): удаляет сопоставление, связанное с ключом obj, с карты при условии, что оно существует. Этот метод вернет значение, связанное с удаляемым ключом. Null будет возвращен либо в том случае, если такой ключ не существует, либо если само значение равно NULL.
Неразрушающие операции
Неразрушающие методы не меняют карту, на которой они действуют. К неразрушающим методам относятся следующие:
1. containsKey: возвращает true, если карта содержит указанный ключ, иначе возвращает false.
публичное логическое значение containsKey (ключ объекта)
2. containsValue: возвращает true, если карта содержит ключ с указанным значением, иначе возвращает false.
public boolean containsValue (значение объекта)
3. get: возвращает значение, связанное с указанным ключом. Значение null возвращается либо в том случае, если ключ не существует, либо если само значение равно null.
public T get (Object Key)
4. size: возвращает количество пар ключ-значение, присутствующих на карте в момент вызова метода.
общедоступный размер int ()
5. isEmpty: возвращает true, если в момент вызова метода на карте отсутствуют пары ключ-значение, иначе возвращает false.
публичное логическое значение isEmpty ()
6. entrySet: пара "ключ-значение" также известна как запись карты. Интерфейс Map.Entry позволяет нам работать с записями карты. entrySet вернет набор всех существующих записей карты.
общедоступный Set <Map.Entry <K, V >> entrySet ()
7. keySet: возвращает набор, содержащий все ключи, присутствующие на карте. Изменения, внесенные на карту, отражаются в этом наборе. Одновременное выполнение операций на карте и обход набора может привести к неопределенному поведению.
общедоступный набор <k> keySet ()
8. values: возвращает представление коллекции всех значений, присутствующих на карте. Изменения, внесенные на карту, отражаются в этой коллекции. Одновременное выполнение операций на карте и обход коллекции может привести к неопределенному поведению.
общедоступная коллекция <V> values ()
Реализация WeakHashMap
Следующая программа содержит класс WHI, который реализует API WeakHashMap. Эта реализация затем используется здесь для сопоставления оценок с оценками.
Ява
// Java Program to implement WeakHashMap import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.WeakHashMap; // The class WHI will implement WeakHashMap class WHI<K, V> { // Make a private WeakHashMap reference // variable private WeakHashMap<K, V> obj; // Constructors // Create WeakHashMap with capacity 16 // and 0.75 load-factor public WHI() { obj = new WeakHashMap<K, V>(); } // Create WeakHashMap with desired capacity // and 0.75 load-factor public WHI( int initialCapacity) { obj = new WeakHashMap<K, V>(initialCapacity); } // Create WeakHashMap with desired capacity // and desired load-factor public WHI( int initialCapacity, float loadFactor) { obj = new WeakHashMap<K, V>(initialCapacity, loadFactor); } // Destructive-Methods // Place the key-value pair in the // WeakHashMap public V put(K key, V value) { return obj.put(key, value); } // Copy all the key-value pairs // from a map public void putAll(Map<K, V> map) { obj.putAll(map); } // Remove all the key-value pairs public void clear() { obj.clear(); } // Remove a particular key public V remove(Object key) { return obj.remove(key); } // Non-Destructive methods // Check if the map contains // a specific key public boolean containsKey(Object key) { return obj.containsKey(key); } // Check if the map contains a key // with specific value public boolean containsValue(Object value) { return obj.containsValue(value); } // get the value for a specific // key public V get(Object key) { return obj.get(key); } // get size of the map public int size() { return obj.size(); } // Check if the map is empty public boolean isEmpty() { return obj.isEmpty(); } // get a set of Map entries public Set<Map.Entry<K, V> > entrySet() { return obj.entrySet(); } // get a set of keys public Set<K> keySet() { return obj.keySet(); } // get a Collection of values public Collection<V> values() { return obj.values(); } } public class Main { public static void main(String args[]) { // Create an object of WHI class // key will be of type String // value will be of type Integer WHI<String, Integer> obj1 = new WHI<String, Integer>(); System.out.println( "The grades and cut off are as follows: " ); // insert key-value pairs in the WeakHashMap object obj1.put( "A+" , 90 ); obj1.put( "A" , 80 ); obj1.put( "B" , 70 ); obj1.put( "C" , 60 ); // Traverse the set containing map entries // entrySet() is used to obtain the set for (Map.Entry<String, Integer> ivar : obj1.entrySet()) { System.out.println(ivar.getKey() + " " + ivar.getValue()); } // get value associated with key "B" System.out.println( "The cut-off for B grade is " + obj1.get( "B" )); } } |
Сорта и обрезки следующие: А + 90 С 60 В 70 А 80 Пороговое значение для сорта B составляет 70.
Note: The grades and cut off might get printed in an unorderly manner. This is because the order is not guaranteed in a WeakHashMap.
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .