मुझे समझ नहीं आ रहा है कि आपको जावा कलेक्शंस सिंगलटन मैप की आवश्यकता क्यों होगी ? क्या यह बहुपरत अनुप्रयोगों में उपयोगी है?
मुझे समझ नहीं आ रहा है कि आपको जावा कलेक्शंस सिंगलटन मैप की आवश्यकता क्यों होगी ? क्या यह बहुपरत अनुप्रयोगों में उपयोगी है?
जवाबों:
असल में, यह आपको ऐसा करने की अनुमति देता है:
callAPIThatTakesAMap(Collections.singletonMap(key, value));
इसके बजाय:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
जो बहुत अच्छा है जब आपके पास केवल एक ही कुंजी / मूल्य जोड़ी होती है। इस स्थिति में शायद बहुत बार उठता नहीं है, लेकिन singleton()
और singletonList()
अक्सर उपयोगी हो सकता है।
यह उपयोगी है यदि आपको कुछ सामान्य कोड (एक पैरामीटर के रूप में, या एक विधि के परिणामस्वरूप) के लिए एक नक्शा पास करने की आवश्यकता है और आप जानते हैं कि इस विशेष मामले में - लेकिन शायद अन्य मामलों में जो नक्शे को उसी सामान्य में पास नहीं करते हैं कोड - आप जिस नक्शे को पास करना चाहते हैं, उसमें केवल एक ही कुंजी है। उस मामले में, सिंगलटन पूर्ण विकसित मानचित्र कार्यान्वयन की तुलना में अधिक कुशल है, और प्रोग्रामर के लिए भी अधिक सुविधाजनक है क्योंकि आपको जो कुछ भी कहने की ज़रूरत है वह कंस्ट्रक्टर में कहा जा सकता है।
इसके अलावा, एक SingletonMap कार्यान्वयन द्वारा लौटाया गया है, जो एक संग्रह है। इसमें केवल दो सदस्य फ़ील्ड शामिल हैं: कुंजी और मान, जबकि एक HashMap नोड ऑब्जेक्ट्स या अन्य सदस्य फ़ील्ड के आंतरिक सरणी को बनाए रखता है। इसलिए यदि आप स्मृति में इन मानचित्रों का एक बहुत कुछ बना रहे हैं , तो कलेक्शंस.सिंघलटन () का उपयोग करना एक विवेकपूर्ण विकल्प होगा।
यह मुख्य रूप से सुविधा और अमूर्तता के लिए है। कुछ एपीआई एक ले Collection
एक तर्क के रूप और यह अच्छा एक को परिवर्तित वस्तुओं के लिए एक आसान तरीका है करने के लिए Set
या Map
।
singletonMap()
और singletonList()
वास्तव singletonSet()
में जावा 1.3 के बाद पेश किए गए क्योंकि singletonSet()
उपयोगी साबित हुए।
कई जवाबों ने आपको बताया कि कब, लेकिन मैं इंगित करना चाहता हूं कि कब not use it
यदि आप चाहते हैं put items later on
, तो इसका उपयोग न करें
क्योंकि कार्यान्वयन के singletonMap
फेंक दिया जाएगाUnsupportedOperationException
यह सिर्फ एक और उदाहरण है, लेकिन मैंने यह पंक्ति कोड लिखी है:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}
ध्यान दें @Override
। इंटरफ़ेस आमतौर पर कई चीजों के नक्शे ले सकता है; यह विशेष रूप से तात्कालिकता हमेशा एक नक्शा देता है जिसमें एक चीज होती है। यह भी ध्यान दें कि नक्शे की कुंजी एक Enum है। इसलिए नक्शे को कभी भी बड़ा नहीं माना जाता है, वे केवल उन कार्यों के परिणामों को निर्दिष्ट करने वाले होते हैं जिन्हें निर्दिष्ट किया जाता है। मेरे वास्तविक उदाहरण में 5 कार्य हैं, और यह तात्कालिकता केवल उनमें से एक का उपयोग करती है।
पूर्ण होने के लिए, EnumSet
या EnumMap
इन मामलों में अक्सर उचित होता है, लेकिन ऊपर दिए गए कोड की तुलना में वे अभी भी नाराज हैं।
SingletonMap
रहा है इसलिए मैंने इसे संपादित किया। जब से मैंने अपने परिवर्तन वापस किए हैं;)