У овом упутству ћемо научити о Јави ВеакХасхМап и њеним операцијама уз помоћ примера. Такође ћемо научити о разликама између ВеакХасхМап и ХасхМап
WeakHashMap
Класа у збирки оквира Јава обезбеђује функцију структуре података хасх табеле …
Примењује интерфејс Мап.
Напомена : Кључеви слабе хеш-мапе су типа ВеакРеференце .
Објект слабог референтног типа може бити смеће сакупљено у Јави ако се референца више не користи у програму.
Научимо прво да направимо слабу хеш-мапу. Затим ћемо научити како се разликује од хеш-мапе.
Направите ВеакХасхМап
Да бисмо креирали слабу хеш-мапу, прво морамо да увозимо java.util.WeakHashMap
пакет. Једном када увозимо пакет, ево како можемо да креирамо слабе хеш-мапове у Јави.
//WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6);
У горњем коду створили смо слабу хеш-мапу названу бројеви.
Ево,
- Кључ - јединствени идентификатор који се користи за повезивање сваког елемента (вредности) на мапи
- Вредност - елементи повезани кључевима на мапи
Примети део new WeakHashMap(8, 0.6)
. Овде је први параметар капацитет, а други параметар лоадФацтор .
- капацитет - Капацитет ове мапе је 8. Значи, може да ускладишти 8 уноса.
- лоадФацтор - Фактор оптерећења ове мапе је 0,6. То значи да кад год се наша хеш табела попуни за 60%, уноси се премештају у нову хеш таблицу двоструке величине оригиналне хеш табеле.
Задани капацитет и фактор оптерећења
Могуће је створити слабу хеш-мапу без дефинисања њеног капацитета и фактора оптерећења. На пример,
// WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap();
Подразумевано,
- капацитет карте биће 16
- фактор оптерећења износиће 0,75
Разлике између ХасхМап-а и ВеакХасхМап-а
Погледајмо имплементацију слабе хасхмапе у Јави.
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of numbers WeakHashMap numbers = new WeakHashMap(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; // Inserting elements numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("WeakHashMap: " + numbers); // Make the reference null two = null; // Perform garbage collection System.gc(); System.out.println("WeakHashMap after garbage collection: " + numbers); ) )
Оутпут
ВеакХасхМап: (Четири = 4, Два = 2) ВеакХасхМап након сакупљања смећа: (Четири)
Као што видимо, када се кључ два слабог хасхмапа поставе на null
и обављају прикупљање смећа, кључ се уклања.
То је зато што су за разлику од хешмапа, кључеви слабих хешмапа слабог референтног типа. То значи да сакупљач смећа уклања унос карте ако се кључ тог уноса више не користи. Ово је корисно за уштеду ресурса.
Сада да видимо исту примену у хасхмапи.
import java.util.HashMap; class Main ( public static void main(String() args) ( // Creating HashMap of even numbers HashMap numbers = new HashMap(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; // Inserting elements numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("HashMap: " + numbers); // Make the reference null two = null; // Perform garbage collection System.gc(); System.out.println("HashMap after garbage collection: " + numbers); ) )
Оутпут
ХасхМап: (Четири = 4, Два = 2) ХасхМап након сакупљања смећа: (Четири = 4, Два = 2)
Овде, када је кључ два хасхмапа постављен на null
и врши сакупљање смећа, кључ се не уклања.
То је зато што су за разлику од слабих хешмапа кључеви хешмапа јаког референтног типа. То значи да сакупљач смећа не уклања унос мапе иако се кључ тог уноса више не користи.
Напомена : Све функционалности хеш-мапа и слабих хеш-мапа су сличне, осим што су кључеви слабе хеш-мапе слабе референце, док су кључеви хеш-мапе снажне референце.
Прављење ВеакХасхМап-а на другим мапама
Ево како на другим мапама можемо створити слабу хеш-мапу.
import java.util.HashMap; import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating a hashmap of even numbers HashMap evenNumbers = new HashMap(); String two = new String("Two"); Integer twoValue = 2; evenNumbers.put(two, twoValue); System.out.println("HashMap: " + evenNumbers); // Creating a weak hash map from other hashmap WeakHashMap numbers = new WeakHashMap(evenNumbers); System.out.println("WeakHashMap: " + numbers); ) )
Оутпут
ХасхМап: (Тво = 2) ВеакХасхМап: (Тво = 2)
Методе ВеакХасхМап
WeakHashMap
Класа даје методе које омогућавају да обављају различите операције на карти.
Уметните елементе у ВеакХасхМап
put()
- на карту убацује одређено мапирање кључа / вредностиputAll()
- убацује све уносе са одређене мапе на ову мапуputIfAbsent()
- убацује наведено мапирање кључа / вредности на мапу ако наведени кључ није присутан на мапи
На пример,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap evenNumbers = new WeakHashMap(); String two = new String("Two"); Integer twoValue = 2; // Using put() evenNumbers.put(two, twoValue); String four = new String("Four"); Integer fourValue = 4; // Using putIfAbsent() evenNumbers.putIfAbsent(four, fourValue); System.out.println("WeakHashMap of even numbers: " + evenNumbers); //Creating WeakHashMap of numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); // Using putAll() numbers.putAll(evenNumbers); System.out.println("WeakHashMap of numbers: " + numbers); ) )
Оутпут
ВеакХасхМап парних бројева: (Фоур = 4, Тво = 2) ВеакХасхМап бројева: (Тво = 2, Фоур = 4, Оне = 1)
Приступите елементима ВеакХасхМап
1. Using entrySet(), keySet() and values()
entrySet()
- returns a set of all the key/value mapping of the mapkeySet()
- returns a set of all the keys of the mapvalues()
- returns a set of all the values of the map
For example,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) )
Output
WeakHashMap: (Two=2, One=1) Key/Value mappings: (Two=2, One=1) Keys: (Two, One) Values: (1, 2)
2. Using get() and getOrDefault()
get()
- Returns the value associated with the specified key. Returnsnull
if the key is not found.getOrDefault()
- Returns the value associated with the specified key. Returns the specified default value if the key is not found.
For example,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using get() int value1 = numbers.get("Two"); System.out.println("Using get(): " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Four", 4); System.out.println("Using getOrDefault(): " + value2); ) )
Output
WeakHashMap: (Two=2, One=1) Using get(): 2 Using getOrDefault(): 4
Remove WeakHashMap Elements
remove(key)
- returns and removes the entry associated with the specified key from the mapremove(key, value)
- removes the entry from the map only if the specified key mapped to the specified value and return a boolean value
For example,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using remove() with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // Using remove() with 2 parameters boolean result = numbers.remove("One", 3); System.out.println("Is the entry (One=3) removed? " + result); System.out.println("Updated WeakHashMap: " + numbers); ) )
Output
ВеакХасхМап: (Два = 2, Један = 1) Уклоњена вредност: 2 Да ли је унос (Један = 3) уклоњен? Ажурирано лажно ВеакХасхМап: (Један = 1)
Остале методе ВеакХасхМап
Метод | Опис |
---|---|
clear() | Уклања све уносе са мапе |
containsKey() | Проверава да ли карта садржи наведени кључ и враћа логичку вредност |
containsValue() | Проверава да ли карта садржи наведену вредност и враћа логичку вредност |
size() | Приказује величину мапе |
isEmpty() | Проверава да ли је карта празна и враћа ли логичку вредност |
Да бисте сазнали више, посетите Јава ВеакХасхМап (званична Јава документација).