Программа Java для реализации API WeakHashMap

Опубликовано: 30 Ноября, 2021

Класс 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 и многому другому, см. Полный курс подготовки к собеседованию .