मुझे पता है LinkedHashMap
में एक अनुमानित पुनरावृत्ति आदेश (सम्मिलन आदेश) है। Set
LinkedHashMap.keySet()
द्वारा लौटाया गया है और Collection
LinkedHashMap.values()
द्वारा लौटाया गया यह आदेश भी इस आदेश को बनाए रखता है?क्या एक LinkedHashMap ऑब्जेक्ट से कुंजी और मानों की वापसी के लिए ऑर्डर की गारंटी है?
उत्तर
मानचित्र इंटरफ़ेस तीन संग्रह विचारों है, जो एक मानचित्र की सामग्री को कुंजियों का सेट , मूल्यों के संग्रह के रूप में देखा जा सकता है, या कुंजी-मान मैपिंग की सेट की अनुमति देते हैं प्रदान करता है। का नक्शा उस मानचित्र के रूप में परिभाषित किया गया है जिसमें मानचित्र के संग्रह पर पुनरावृत्त विचार उनके तत्व लौटाते हैं। कुछ मानचित्र कार्यान्वयन, जैसे
TreeMap
कक्षा, उनके आदेश के अनुसार विशिष्ट गारंटीएं प्रदान करते हैं; अन्य,HashMap
कक्षा की तरह, नहीं।
- Map
यह लिंक्ड सूची यात्रा आदेश, जो आम तौर पर आदेश जिसमें कुंजी नक्शा (प्रविष्टि-आदेश) में डाला गया है परिभाषित करता है।
तो, हाँ, keySet()
, values()
, और entrySet()
(तीन संग्रह विचारों का उल्लेख) आंतरिक लिंक्ड सूची का उपयोग करता है में वापसी मान। और हां, Map
और LinkedHashMap
के लिए JavaDoc इसकी गारंटी देता है।
यह सब के बाद, इस वर्ग का बिंदु है।
इंटरफ़ेस को देखते हुए यह एक सादा Set
देता है और SortedSet
नहीं। तो कोई गारंटी नहीं है।
कार्यान्वयन (हमेशा एक बुरा विचार) को देखकर एक अंतर्निहित गारंटी संभालने से पहले भी अन्य सभी जावा कार्यान्वयन :)
बेहतर होगा कि तुम उदाहरण के लिए बना सकते हैं एक निर्माता में कीसेट साथ TreeSet में कार्यान्वयन को देखो ।
प्रलेखन के करीब देख रहे हैं, वास्तव में गारंटी है। जैसा कि किसी ने पहले ही लिखा है, यह इस वर्ग का बहुत ही बिंदु है। – glglgl
स्रोत को देखते हुए, ऐसा लगता है कि ऐसा करता है। keySet()
, values()
, और entrySet()
सभी आंतरिक रूप से एक ही प्रविष्टि इटरेटर का उपयोग करते हैं।
रिपो के लिए एक लिंक होना अच्छा होगा, लेकिन मैं आलसी हूं :-) और निश्चित रूप से, यह आगे संगतता की गारंटी नहीं है। –
AFAIK इसे दस्तावेज नहीं किया गया है ताकि आप "औपचारिक रूप से" ऐसा नहीं मान सकें। हालांकि, यह असंभव है कि वर्तमान कार्यान्वयन बदल जाएगा।
यदि आप ऑर्डर सुनिश्चित करना चाहते हैं, तो आप मानचित्र पर फिर से शुरू करना चाहते हैं और उन्हें अपनी पसंद के ऑर्डर फ़ंक्शन के साथ सॉर्ट किए गए सेट में डालना चाहते हैं, हालांकि आप एक प्रदर्शन लागत का भुगतान करेंगे, स्वाभाविक रूप से।
क्या आपका मतलब एंट्रीसेट() कुंजी की गारंटी देता है, keySet() द्वारा नहीं? – user256239
@kknight: मुझे यकीन नहीं है। जावाडोक कहता है: "यह जुड़ा हुआ सूची पुनरावृत्ति क्रम को परिभाषित करती है, जो आमतौर पर वह क्रम होता है जिसमें कुंजी को मानचित्र में सम्मिलित किया गया था (सम्मिलन-आदेश)।" हालांकि, जेडीके के लिए जावाडॉक्स सामान्य रूप से बहुत संदिग्ध हैं। – Uri
अगर एंट्रीसेट() भी पुनरावृत्ति आदेश की गारंटी नहीं देता है, तो LinkedHashMap और हैश मैप के बीच क्या अंतर है? हम LinkedHashMap इंस्टेंस में पूर्वानुमानित पुनरावृत्ति आदेश का लाभ कैसे उठा सकते हैं? – user256239
आप ऐसा मान सकते हैं। जावाडोक कहते हैं कि 'अनुमानित पुनरावृत्ति आदेश', और मानचित्र में उपलब्ध एकमात्र इटरेटर हैं जो कुंजीसेट(), एंट्रीसेट(), और मान() के लिए हैं।
तो किसी और योग्यता की अनुपस्थिति में यह स्पष्ट रूप से उन सभी यात्रियों को लागू करना है।
मुझे नहीं लगता कि आप keySet() और मानों() के क्रम को मान सकते हैं।
मैं आसानी से लिंक्ड हैशैप का कार्यान्वयन लिख सकता हूं जो आपको अनॉर्डर्ड कीसेट() और मान() देता है, जब तक कि मैं मानचित्र में परिभाषित इन दो विधियों के अनुबंध से चिपक जाता हूं और हैश मैप में ओवरराइड करता हूं।
'लिंक्ड हैश मैप' वर्ग का पूरा उद्देश्य नक्शा को फिर से चालू करते समय तत्वों के क्रम को रखना है और यह व्यवहार अच्छी तरह से निर्दिष्ट है। यदि आप बेस क्लास विनिर्देश के अनुपालन के बिना सबक्लास लिखते हैं, तो आप कुछ गलत कर रहे हैं। – zakinster
LinkedHashMap.keySet()
और LinkedHashMap.entrySet()
के साथ भ्रमित न हों सेट करें और इसलिए इसे आदेश की गारंटी नहीं देनी चाहिए!
Set
HashSet
, TreeSet
आदि के साथ एक इंटरफ़ेस है जो इसके क्रियान्वयन करता है। HashSet
Set
इंटरफ़ेस का कार्यान्वयन आदेश की गारंटी नहीं देता है। लेकिन TreeSet
करता है। LinkedHashSet
करता है।
इसलिए यह Set
पर LinkedHashMap
में लागू किया गया है यह जानने के लिए कि रिटर्निंग सेट संदर्भ ऑर्डरिंग की गारंटी देगा या नहीं। मैं LinkedHashMap
के स्रोत कोड के माध्यम से चला गया, यह इस तरह दिखता है:
private final class KeySet extends AbstractSet<K> {...}
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {...}
इस प्रकार LinkedHashMap/HashMap Set
अर्थात KeySet
के अपने स्वयं के कार्यान्वयन है। इस प्रकार HashSet
के साथ इसे भ्रमित न करें।
इसके अलावा, आदेश को बनाए रखा जाता है कि बाल्टी में तत्व कैसे डाले जाते हैं। LinkedHashMap
की विधि देखें और HashMap
के साथ इसकी तुलना करें जो HashMap
और LinkedHashMap
के बीच मुख्य अंतर को हाइलाइट करता है।
हालांकि यह उत्तर निश्चित रूप से उपयोगी जानकारी प्रस्तुत करता है, लेकिन यह वास्तव में प्रश्न का उत्तर नहीं देता है। यह मूल रूप से कह रहा है कि वे अनुमानित पुनरावृत्ति आदेश कर सकते हैं। – Tuupertunut
- 1. क्या readdir() ऑर्डर की गारंटी देता है?
- 2. गतिशील रूप से UIKeyboards की वापसी कुंजी
- 3. क्या ऑब्जेक्ट क्लास और ऑब्जेक्ट श्रेणी के लिए उपयोग की जाने वाली मानों की एक सूची है?
- 4. क्या ऑब्जेक्ट लौटाए जाने पर स्थानांतरित होने की गारंटी है?
- 5. कुंजी मान जोड़े के सरणी के लिए ऑब्जेक्ट की गुणों और मानों को कनवर्ट करें
- 6. क्या इंसर्ट रिटर्निंग "सही" ऑर्डर में चीजों को वापस करने की गारंटी है?
- 7. फॉर-प्रत्येक लूप AS3: क्या दिशा की गारंटी है?
- 8. कीबोर्ड छिपाने के लिए कैसे - की - UITextView iPhone - वापसी कुंजी
- 9. पाइथन शब्दकोश में कुंजी() और मान() की क्रमशः समान होने की गारंटी है?
- 10. मैं LinkedHashMap के लिए एक कुंजी इटरेटर कैसे प्राप्त करूं?
- 11. तरह मूल्यों और dict अजगर से चाबी की वापसी सूची
- 12. क्या Dir.glob आदेश की गारंटी देता है?
- 13. ऑब्जेक्ट मानों को उप-वर्ग करने के लिए superclass ऑब्जेक्ट मानों की प्रतिलिपि कैसे करें?
- 14. क्या कोई सिंक्रनाइज़ेशन क्लास है जो सी # में फीफो ऑर्डर की गारंटी देती है?
- 15. PHP में सरणी इनपुट के लिए गारंटी की गई पोस्ट में INPUTS का ऑर्डर है?
- 16. क्या एक अजाक्स अनुरोध कुकीज़ भेजने की गारंटी है?
- 17. सेवा लिस्टनर और सर्विसट्रैकर कॉल पर कौन सी ऑर्डर गारंटी प्रदान की जाती है?
- 18. मल्टीपार्ट अपलोड फॉर्म: ऑर्डर गारंटी है?
- 19. क्या गुणों के आदेश की कोई गारंटी है?
- 20. क्या एनएसएआरएआरई-लूप गणना आदेश की गारंटी है?
- 21. वेब विधि वापसी मानों के लिए एक अच्छा डिज़ाइन पैटर्न क्या है?
- 22. क्या std :: map में तत्वों का ऑर्डर करने की गारंटी है?
- 23. फ़ंक्शन की वापसी के लिए Decltype
- 24. क्या पाइथन सॉर्ट कुंजियां केवल एक बार बुलाए जाने की गारंटी है?
- 25. एनएस डिक्शनरी की कुंजी/मानों को ट्रैवर्स करना, enumerateKeysAndObjectsUsingBock लूपिंग कुंजियों और कॉलिंग ऑब्जेक्ट से अधिक कुशल है Forkey :?
- 26. ऑब्जेक्ट के गुणों में से एक की एक सरणी के लिए वस्तुओं की एक सूची कन्वर्ट
- 27. नोटिफ़िकॉन की गारंटी कैसे दी जाती है?
- 28. LinkedHashMap
- 29. urlencode मानों की एक सरणी
- 30. gettimeofday() microsecond संकल्प होने की गारंटी है?
चूंकि सभी उत्तरों 'मान()' के साथ-साथ 'keySet()' के मुद्दे को संबोधित करते हैं, इसलिए मैंने इसे शामिल करने के लिए प्रश्न का विस्तार किया है। इसका मतलब है कि इसके अधिक डुप्लिकेट के रूप में अधिक प्रश्न बंद किए जा सकते हैं। –