एक मल्टीसेट, जिसे बैग भी कहा जाता है, एक ऐसा संग्रह है जो एक ही तत्व के कई उदाहरणों की अनुमति देता है। सेट के विपरीत, जहाँ प्रत्येक तत्व अद्वितीय होता है, मल्टीसेट में डुप्लिकेट हो सकते हैं। जबकि जावा का मानक पुस्तकालय सीधे मल्टीसेट कार्यान्वयन प्रदान नहीं करता है, कई दृष्टिकोण इस कार्यक्षमता को कुशलतापूर्वक प्राप्त कर सकते हैं।
विषयसूची
- जावा में मल्टीसेट को कार्यान्वित करना
- HashMap कार्यान्वयन उदाहरण
- Guava के Multiset का लाभ उठाना
- सही दृष्टिकोण चुनना
जावा में मल्टीसेट को कार्यान्वित करना
जावा में मल्टीसेट बनाने के लिए कई तरीके मौजूद हैं। इष्टतम विकल्प आपकी विशिष्ट आवश्यकताओं और प्राथमिकताओं पर निर्भर करता है:
HashMap
का उपयोग करना: यह एक सीधा-सादा तरीका है। एकHashMap
प्रत्येक तत्व को उसकी गणना से मैप करता है। एक तत्व जोड़ने से उसकी गणना बढ़ जाती है; एक तत्व को हटाने से यह घट जाती है (शून्य गणना को उचित रूप से संभालना)।TreeMap
का उपयोग करना:HashMap
के समान, लेकिनTreeMap
प्राकृतिक क्रम या एक कस्टमComparator
के आधार पर क्रमबद्ध क्रम बनाए रखता है। जब तत्व क्रम महत्वपूर्ण हो तो उपयोगी होता है।- Guava के
Multiset
का उपयोग करना: Guava लाइब्रेरी एक मजबूत, अनुकूलितMultiset
कार्यान्वयन प्रदान करती है। इसकी सुविधा और दक्षता के कारण यह आम तौर पर पसंदीदा तरीका है। - एक कस्टम क्लास बनाना: जटिल परिदृश्यों या अनूठी आवश्यकताओं के लिए, एक कस्टम क्लास अधिकतम लचीलापन प्रदान करता है लेकिन अधिक विकास प्रयास की मांग करता है।
HashMap कार्यान्वयन उदाहरण
यहाँ HashMap
का उपयोग करके एक बुनियादी मल्टीसेट कार्यान्वयन दिया गया है:
import java.util.HashMap;
import java.util.Map;
public class MultisetHashMap {
private Map<String, Integer> elements;
public MultisetHashMap() {
elements = new HashMap<>();
}
public void add(String element) {
elements.put(element, elements.getOrDefault(element, 0) + 1);
}
public void remove(String element) {
if (elements.containsKey(element)) {
int count = elements.get(element);
if (count > 1) {
elements.put(element, count - 1);
} else {
elements.remove(element);
}
}
}
public int getCount(String element) {
return elements.getOrDefault(element, 0);
}
public static void main(String[] args) {
MultisetHashMap multiset = new MultisetHashMap();
multiset.add("apple");
multiset.add("banana");
multiset.add("apple");
multiset.add("apple");
System.out.println("Count of apples: " + multiset.getCount("apple")); // Output: 3
multiset.remove("apple");
System.out.println("Count of apples after removal: " + multiset.getCount("apple")); // Output: 2
}
}
Guava के Multiset का लाभ उठाना
Guava का Multiset
एक साफ, अधिक कुशल समाधान प्रदान करता है:
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
public class MultisetGuava {
public static void main(String[] args) {
Multiset<String> multiset = HashMultiset.create();
multiset.add("apple");
multiset.add("banana");
multiset.add("apple");
multiset.add("apple");
System.out.println("Count of apples: " + multiset.count("apple")); // Output: 3
multiset.remove("apple");
System.out.println("Count of apples after removal: " + multiset.count("apple")); // Output: 2
System.out.println("Size of multiset: " + multiset.size()); //Output: 3
for(String element : multiset){
System.out.println("Element: " + element + ", Count: " + multiset.count(element));
}
}
}
अपने प्रोजेक्ट की बिल्ड फ़ाइल में Guava निर्भरता को शामिल करना याद रखें।
सही दृष्टिकोण चुनना
अधिकांश अनुप्रयोगों के लिए, Guava का Multiset
इसकी मजबूती और दक्षता के कारण अनुशंसित है। HashMap
दृष्टिकोण सरल परिदृश्यों के लिए उपयुक्त है जहाँ आपको Guava की अतिरिक्त सुविधाओं की आवश्यकता नहीं है। एक कस्टम क्लास केवल अत्यधिक विशिष्ट स्थितियों के लिए आवश्यक है।