मुझे समझ में नहीं आता कि आपको जावा संग्रह singletonMap क्यों चाहिए? क्या यह बहुप्रचारित अनुप्रयोगों में उपयोगी है?मैं जावा संग्रह सिंगलटन मैप विधि का उपयोग कब करूं?
उत्तर
असल में, यह आप ऐसा कर सकते हैं:
callAPIThatTakesAMap(Collections.singletonMap(key, value));
बल्कि इस से
:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
जो बहुत अच्छे आप केवल एक ही मुख्य/मान जोड़े है जब है। यह स्थिति शायद अक्सर उत्पन्न नहीं होती है, लेकिन singleton()
और singletonList()
अक्सर उपयोगी हो सकती है।
कहा जाता है, मैं डीएओ में हर समय सिंगलटन मैप का उपयोग करता हूं जो स्प्रिंग के नामांकित पैरामीटर जेडीबीसी टेम्पलेट का उपयोग करता है। यदि आपके पास एक सरल चयन कथन है जैसे "बार से foo चुनें जहां id =: barId" तो आपको एक कुंजी-मान जोड़ी, barId = 123 के साथ पैरामीटर मानचित्र की आवश्यकता होगी। सिंगलटन मैप() का उपयोग करने के लिए यह एक शानदार जगह है। – spaaarky21
यदि कोई एपीआई इनपुट के रूप में मानचित्र लेता है और मैं Collections.singleton (कुंजी, मान) का उपयोग कर रहा हूं, तो मैं अपरिवर्तनीय मानचित्र पास कर रहा हूं, जो कि उस एपीआई के लिए अच्छा नहीं हो सकता है, क्योंकि हो सकता है कि एपीआई इस मानचित्र में अधिक तत्व जोड़ती है, और इस मामले में, कुछ भी नहीं किया जा सकता है क्योंकि यह अपरिवर्तनीय है। – AKS
@AKS: सिद्धांत रूप में हां, लेकिन व्यावहारिक रूप से पढ़ने के लिए केवल पहुंच अधिक आम है, और यह एपीआई दस्तावेज से स्पष्ट होना चाहिए कि पैरामीटर के रूप में पारित मानचित्र में प्रविष्टियां जोड़ दी गई हैं या नहीं। –
यह उपयोगी है अगर आपको किसी सामान्य कोड (पैरामीटर के रूप में, या किसी विधि से परिणामस्वरूप) को मानचित्र पारित करने की आवश्यकता है और आप जानते हैं कि इस विशेष मामले में - लेकिन संभवतः मानचित्र को पास करने वाले अन्य मामलों में नहीं उसी सामान्य कोड पर - जिस मानचित्र को आप पास करना चाहते हैं वह केवल एक ही कुंजी है। उस स्थिति में, सिंगलटन मैप एक पूर्ण उड़ा नक्शा कार्यान्वयन से अधिक कुशल है, और प्रोग्रामर के लिए भी अधिक सुविधाजनक है क्योंकि आपको जो भी कहना है उसे कन्स्ट्रक्टर में कहा जा सकता है।
अच्छा स्पष्टीकरण –
यह मुख्य रूप से सुविधा और अमूर्तता के लिए है। कुछ एपीआई Collection
को तर्क के रूप में लेते हैं और ऑब्जेक्ट को Set
या Map
में परिवर्तित करने का एक आसान तरीका है।
singletonMap()
और singletonList()
वास्तव में जावा 1.3 में singletonSet()
के बाद शुरू किए गए थे क्योंकि singletonSet()
उपयोगी साबित हुई।
कोई सिंगलटनसेट() विधि नहीं है, इसे सिंगलटन() –
यह सिर्फ एक और उदाहरण है, लेकिन मैं कोड की इस पंक्ति ने लिखा है:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}
टिप्पणी @Override
। इंटरफेस अधिक आम तौर पर कई चीजों के नक्शे ले सकता है; यह विशेष तत्काल हमेशा एक चीज़ युक्त नक्शा देता है। यह भी ध्यान रखें कि मानचित्र की कुंजी एक एनम है। तो नक्शे को कभी बड़ा नहीं माना जाता है, वे केवल जो भी क्रिया निर्दिष्ट किए गए हैं, उसके परिणाम शामिल हैं। मेरे वास्तविक उदाहरण में 5 कार्यवाही हैं, और यह तत्काल केवल उनमें से एक का उपयोग करता है।
पूर्ण होने के लिए, EnumSet
या EnumMap
अक्सर इन मामलों में उपयुक्त है, लेकिन वे अभी भी उपरोक्त कोड की तुलना में कष्टप्रद वर्बोज़ हैं।
इसके अलावा, Collections.singletonMap() द्वारा लौटाए गए सिंगलटन मैप कार्यान्वयन में नियमित हैश मैप की तुलना में एक छोटी मेमोरी पदचिह्न है। इसमें केवल दो सदस्य फ़ील्ड शामिल हैं: कुंजी और मान, जबकि हैश मैप नोड ऑब्जेक्ट्स और अन्य सदस्य फ़ील्ड की आंतरिक सरणी बनाए रखता है। तो यदि आप मेमोरी में इन मानचित्रों के लॉट बना रहे हैं, तो यह संग्रह .singletonMap() का उपयोग करने के लिए एक समझदार विकल्प होगा।
कई जवाब तुमसे कहा था जब, लेकिन मैं
क्योंकि singletonMap
का पुट कार्यान्वयन UnsupportedOperationException
not use it
के लिए बाहर इंगित करना चाहते हैं यह का उपयोग नहीं करते, तो आप put items later on
करना चाहते हैं,
- 1. मैं initWithCoder का उपयोग कब करूं: विधि?
- 2. मैं सुपर() का उपयोग कब करूं?
- 3. मैं CFRelease का उपयोग कब करूं?
- 4. मैं जावा 7 में संग्रह अक्षर का उपयोग कैसे करूं?
- 5. मैं ऐपडोमेन का उपयोग कब करूं?
- 6. जावा संग्रह: किस संग्रह का उपयोग करने के लिए और कब?
- 7. एक सिंगलटन संग्रह की वस्तु प्राप्त करना
- 8. रुबी में सिंगलटन कक्षाओं का उपयोग करना कब बुद्धिमान है?
- 9. एंड्रॉइड: सेवा बनाम सिंगलटन का उपयोग कब करें?
- 10. पारंपरिक अनुप्रयोगों पर मैं PowerShell का उपयोग कब करूं?
- 11. मैं एक अलग CouchDB डेटाबेस का उपयोग कब करूं?
- 12. स्मृति-मैप की गई फ़ाइलों का उपयोग कब करें?
- 13. जावा में स्ट्रिंगबिल्डर का उपयोग कब करें
- 14. मैं जावा कॉमन्स-संग्रह का उपयोग कैसे सीखूं?
- 15. फैक्टरी विधि सिंगलटन उदाहरण
- 16. जावा सेट संग्रह - ओवरराइड बराबर विधि
- 17. मैं जावा विधि का परीक्षण कैसे करूं जो प्रोसेसबिल्डर और प्रक्रिया का उपयोग करता है?
- 18. जावा हैश मैप से एक अपरिवर्तनीय संग्रह कैसे प्राप्त करें?
- 19. जावा - Iterators का उपयोग कब करें?
- 20. मैं unittest setUpClass विधि() का उपयोग कैसे करूं?
- 21. मैं NSMutableDictionary पर writeToFile विधि का उपयोग कैसे करूं?
- 22. मैं System.Data.DataTableExtensions 'CopyToDataTable विधि का उपयोग कैसे करूं?
- 23. उद्देश्य सी - मैं initWithCoder विधि का उपयोग कैसे करूं?
- 24. मैं Android में showAlert विधि का उपयोग कैसे करूं?
- 25. संग्रह बनाम एकाधिक गुणों का उपयोग कब करें
- 26. मैं प्रतिनिधियों का उपयोग कहां उपयोग करूं?
- 27. मैं जावा ईई/ईजेबी सिंगलटन कैसे लिखूं?
- 28. मैं एनम सिंगलटन में लॉगिंग कैसे कार्यान्वित करूं?
- 29. जावा सिंक्रनाइज़ ब्लॉक बनाम संग्रह। सिंक्रनाइज़ किए गए मैप
- 30. मैं हैश मैप में मानों के माध्यम से लूप करने के लिए जावा में फ़ोरैच लूप का उपयोग कैसे करूं?
@ स्काफमैन: यह मेरा बुरा होगा। सबसे पहले मैंने सोचा कि ओपी कॉमन्स क्लास 'सिंगलटन मैप' का जिक्र कर रहा था इसलिए मैंने इसे संपादित किया।मैंने तब से अपने परिवर्तनों को वापस ले लिया है;) – tskuzzy