Јава ВеакХасхМап

У овом упутству ћемо научити о Јави ВеакХасхМап и њеним операцијама уз помоћ примера. Такође ћемо научити о разликама између ВеакХасхМап и ХасхМап

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 map
  • keySet() - returns a set of all the keys of the map
  • values() - 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. Returns null 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 map
  • remove(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() Проверава да ли је карта празна и враћа ли логичку вредност

Да бисте сазнали више, посетите Јава ВеакХасхМап (званична Јава документација).

Занимљиви Чланци...