जावा WeakHashMap

इस ट्यूटोरियल में, हम उदाहरणों की मदद से Java WeakHashMap और इसके संचालन के बारे में जानेंगे। हम WeakHashMap और HashMap के बीच अंतर के बारे में भी जानेंगे

WeakHashMapजावा संग्रह ढांचे का वर्ग हैश तालिका डेटा संरचना की सुविधा प्रदान करता है …

यह मैप इंटरफेस को लागू करता है।

नोट : कमजोर हैशमैप की कुंजी कमजोर रेफरेंस प्रकार की होती है।

कमजोर संदर्भ प्रकार की वस्तु को जावा में एकत्र किया जा सकता है यदि संदर्भ अब प्रोग्राम में उपयोग नहीं किया जाता है।

आइए पहले एक कमजोर हैश मैप बनाना सीखें। फिर, हम सीखेंगे कि यह हैशमैप से कैसे भिन्न होता है।

एक 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 प्रविष्टियों को संग्रहीत कर सकता है।
  • loadFactor - इस मानचित्र का भार कारक 0.6 है। इसका मतलब यह है कि जब भी हमारी हैश तालिका 60% से भर जाती है, तो प्रविष्टियां मूल हैश तालिका के आकार के दोगुने से एक नए हैश तालिका में ले जाया जाता है।

डिफ़ॉल्ट क्षमता और लोड कारक

अपनी क्षमता और भार कारक को परिभाषित किए बिना एक कमजोर हैशमैप बनाना संभव है। उदाहरण के लिए,

 // WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap(); 

डिफ़ॉल्ट रूप से,

  • मानचित्र की क्षमता 16 होगी
  • लोड फैक्टर 0.75 होगा

HashMap और WeakHashMap के बीच अंतर

आइए जावा में एक कमजोर हैशमाप के कार्यान्वयन को देखें।

 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); ) ) 

आउटपुट

 WeakHashMap: (चार = 4, दो = 2) WeakHashMap कचरा संग्रह के बाद: (चार) 

जैसा कि हम देख सकते हैं, जब एक कमजोर हैशमाप की कुंजी दो को 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); ) ) 

आउटपुट

 HashMap: (चार = 4, दो = 2) कचरा संग्रहण के बाद HashMap: (चार = 4, दो = 2) 

यहां, जब हैशमैप की कुंजी दो को nullकचरा संग्रह करने के लिए सेट किया जाता है , तो कुंजी को हटाया नहीं जाता है।

ऐसा इसलिए है क्योंकि हैशमैप की कमजोर हैशमैप कुंजियों के विपरीत मजबूत संदर्भ प्रकार के हैं। इसका मतलब यह है कि मानचित्र के प्रवेश को कचरा कलेक्टर द्वारा हटाया नहीं जाता है, भले ही उस प्रविष्टि की कुंजी अब उपयोग नहीं की जाती है।

नोट : हैशमैप और कमजोर हैशमैप की सभी कार्यक्षमताएं समान हैं सिवाय एक कमजोर हैशमैप की चाबियाँ कमजोर संदर्भ की हैं, जबकि एक हैशमैप की चाबियाँ मजबूत संदर्भ की हैं।

अन्य मानचित्रों से WeakHashMap बनाना

यहां बताया गया है कि हम अन्य मानचित्रों से एक कमजोर हैशमैप कैसे बना सकते हैं।

 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); ) ) 

आउटपुट

 HashMap: (दो = 2) कमजोर मशाल: (दो = 2) 

WeakHashMap के तरीके

WeakHashMapवर्ग तरीकों कि नक्शे पर हमारे लिए विभिन्न कार्य करने की अनुमति प्रदान करता है।

तत्वों को 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) 

WeakHashMap तत्वों तक पहुँचें

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

WeakHashMap: (दो = 2, एक = 1) निकाला गया मान: 2 क्या प्रविष्टि (एक = 3) हटा दी गई है? गलत अपडेट किया गया कमजोर: (एक = 1)

WeakHashMap के अन्य तरीके

तरीका विवरण
clear() नक्शे से सभी प्रविष्टियाँ निकालता है
containsKey() जाँचता है कि क्या मानचित्र में निर्दिष्ट कुंजी है और एक बूलियन मान लौटाता है
containsValue() जाँचता है कि क्या मानचित्र में निर्दिष्ट मान है और बूलियन मान लौटाता है
size() नक्शे का आकार लौटाता है
isEmpty() चेक करता है कि नक्शा खाली है और बूलियन मान लौटाता है

अधिक जानने के लिए, Java WeakHashMap (आधिकारिक जावा प्रलेखन) पर जाएं।

दिलचस्प लेख...