2010-08-13 8 views
33

जब LinkedHashMap.keySet() को कॉल किया जाता है, तो सेट का क्रम वापस लौटाए गए क्रम के समान होगा?क्या जावा का लिंक्ड हैशैप कुंजी के क्रम को बनाए रखता है?

+0

PHP से आने वाले लोगों के लिए, मुझे यह इंगित करके मेरी सहायता करें कि एक LinkedHashMap एक PHP सरणी की तरह बहुत व्यवहार करता है। –

उत्तर

44

हां।

देखें: LinkedHashMap:

यह लिंक्ड सूची यात्रा आदेश, जो आम तौर पर आदेश जिसमें कुंजी नक्शा (प्रविष्टि-आदेश) में डाला गया है परिभाषित करता है।

और HashMap#keySet प्रलेखन से:

सेट [वापस लौटे] मानचित्र के द्वारा समर्थित है, तो नक्शा करने के लिए परिवर्तन में परिलक्षित होते हैं सेट, और उपाध्यक्ष प्रतिकूल।

+2

@ टॉम धन्यवाद, मुझे अभी भी विश्वास नहीं है कि यह स्पष्ट है। क्यों LinkedHashMap.keySet() निश्चित क्रम के साथ सेट का एक उप-वर्ग वापस नहीं करेगा? – Armand

+4

क्योंकि अगर यह सॉर्टेडसेट वापस लौटाता है, तो LinkedHashMap आवश्यकता को जोड़ देगा कि इसकी चाबियाँ एक प्रकार के हैं जो तुलनात्मक लागू करती हैं, या एक तुलनित्र कार्य प्रदान किया जाता है। यह मानचित्र द्वारा आवश्यक नहीं है। सॉर्टेडसेट दस्तावेज़ देखें: http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html। यह आवश्यकता नहीं है, यहां तक ​​कि उन चाबियों को भी अनुमति देता है जो एक LinkedHashMap में उपयोग किए जाने योग्य तुलनात्मक नहीं हैं, जो अधिक सामान्य मामला है। लिंक्ड हैशैप का कार्यान्वयन एक सॉर्टेडसेट भी लौटा सकता है यदि इसकी चाबियाँ तुलनात्मक हैं, लेकिन इसकी आवश्यकता नहीं है। –

+1

बेशक, लिंक्ड हैशैप का अनुबंध कहता है कि यह इंसर्टेशन ऑर्डरिंग को बनाए रखता है, जो प्राकृतिक आदेश नहीं हो सकता है। तो उस स्थिति में, एक सॉर्टेडसेट बिल्कुल काम नहीं करेगा --- चाबियों को बस इस तरह से हल नहीं किया जाएगा। –

32

Yes। अपवाद यह है कि जब एक कुंजी फिर से सम्मिलित होती है, तो यह उस क्रम में दिखाई देता है जिसमें इसे पहली बार सूची में डाला गया था।

+4

+1 उस कोने मामले पर अच्छा पकड़। –

+3

असल में, अपवाद तब होता है जब कुंजी ** पुन: दर्ज की जाती है **, हटाई नहीं जाती है और पुन: उपयोग नहीं की जाती है।मामला तब होता है जब आप पहले से मानचित्र में मौजूद कुंजी के लिए 'put (key, value)' कहते हैं। (जावाडोक यह स्पष्ट रूप से बताता है।) –

संबंधित मुद्दे