2012-05-23 12 views
5

क्या जावा में कोई कक्षा है, जिसमें ऑर्डर के क्रम में तत्वों की एक सरणी है और तेजी से खोज के लिए अनुकूलित किया गया है?दोनों शेड और अनुक्रमित सूची या सरणी?

आईई। मुझे संख्यात्मक सूचकांक (जैसे Vector में) और हैश द्वारा तत्वों को पुनर्प्राप्त करने की आवश्यकता है (जैसे HashMap)।

LinkedHashMap

का मिलान नहीं करती मुझे लगता है कि क्योंकि यह आदेश की गारंटी देता है LinkedHashMap से मेल नहीं खाता है, लेकिन सूचकांक (स्थिति संख्या) द्वारा तेजी से एक्सेस की अनुमति नहीं है। विवरण के अनुसार, किसी दिए गए स्थान को खोजने के लिए इसे संपूर्ण श्रृंखला को पार करने की आवश्यकता होगी। यह Collection इटेटरेटर के साथ क्या कर सकता है।

संपादित 2

अर्थात दोनों कुंजी और इंडेक्स द्वारा खोजना चाहिए, न केवल कुंजी द्वारा।

उत्तर

2

आप हैश द्वारा तत्वों की तेज़ी से पुनर्प्राप्ति के लिए Map का उपयोग कर सकते हैं। परिभाषा के अनुसार, Map अनियंत्रित है और इंडेक्स के बारे में बात करना ज्यादा समझ में नहीं आता है। के बाद से यह गारंटी देता है कि प्रविष्टि आदेश में यात्रा समय में संरक्षित है, हालांकि सूचकांक द्वारा एक तत्व तक पहुँचने में अभी भी कुछ अतिरिक्त संसाधन की आवश्यकता होगी एक LinkedHashMap का उपयोग करना, काम का हो सकता है, कुछ इस तरह:

map.entrySet().toArray()[index] // mind the casts, etc. 

अपने नक्शे में परिवर्तन बार बार करते हैं, तो अगर आप सरणी को कैश करते हैं और यह देखने के लिए जांच करते हैं कि मानचित्र का आकार इंडेक्स द्वारा प्रविष्टि तक पहुंचने से पहले बदल गया है, तो केवल एक नया सरणी बनाते समय आकार में परिवर्तन का पता चला है। दूसरी तरफ, यदि नक्शा अक्सर बदलता है तो आपको खराब प्रदर्शन करने वाली डेटा संरचना बनाने, प्रत्येक पहुंच पर सरणी को फिर से बनाना होगा।

+0

मुझे लगता है कि 'toArray()' विधि होगी पूरे संग्रह को स्कैन करें जो सभी बिंदुओं के बेवकूफ़ बना देगा। –

+0

@SuzanCioc वास्तव में। यही कारण है कि मैं अपने उत्तर में बताता हूं, यह केवल तभी समझ में आता है जब आपका नक्शा निरंतर बदलता है और आप सरणी –

2

मुझे लगता है कि आप LinkedHashSet कोशिश कर सकते हैं।

+0

को कैश कर सकते हैं, यह इसकी अनुक्रमणिका को दिए गए तत्व तक पहुंचने की समस्या का समाधान नहीं करता है। –

1

लिंकड हैशैप का उपयोग करें। यह आपको कुंजी के माध्यम से तत्वों को पुनर्प्राप्त करने देगा। और आप उसी अनुक्रम में तत्वों को पुनर्प्राप्त कर सकते हैं जैसे आपने इसे संग्रहीत किया है।

1

मुझे लगता है कि आप के लिए LinkedHashMap

डॉक्स से देख रहे हैं:

हैश तालिका और मानचित्र इंटरफ़ेस का लिंक्ड सूची कार्यान्वयन, उम्मीद के मुताबिक यात्रा आदेश के साथ। यह कार्यान्वयन हैश मैप से अलग है जिसमें यह अपनी सभी प्रविष्टियों के माध्यम से चलने वाली दोगुनी-लिंक्ड सूची बनाए रखता है। यह लिंक्ड सूची पुनरावृत्ति क्रम को परिभाषित करती है, जो आमतौर पर वह क्रम होता है जिसमें कुंजी को मानचित्र में सम्मिलित किया गया था (सम्मिलन-आदेश)। ध्यान दें कि मानचित्र में एक कुंजी फिर से डाली जाने पर सम्मिलन आदेश प्रभावित नहीं होता है। (M.put (k, v) को m.put (k, v) लागू किया जाता है जब m.containsKey (k) आमंत्रण से पहले तुरंत वापस आ जाएगा।)