2012-09-07 50 views
6

मेरे पास बड़ा संग्रह का नाम है जो नाम/मूल्य जोड़े द्वारा परिभाषित किया गया है। मुझे अपने किसी भी मूल्य पर तेज़ी से पहुंचने की आवश्यकता है और उन्हें नाम से वर्णानुक्रमित क्रम में वापस करने में सक्षम होना चाहिए। सबसे पहले मैंने सोचा कि मैं तेजी से पहुंच प्राप्त करने के लिए हैश मैप का उपयोग कर सकता हूं। लेकिन यह मुझे कोई आदेश नहीं दिया। मैंने LinkedHashSet पर स्विच करने का फैसला किया।
इसके साथ समस्या यह है कि मुझे सूची के सही स्थानों में नए ऑब्जेक्ट्स डालने की आवश्यकता है, लेकिन LinkedHashSet इसे अनुमति नहीं देता है। मुझे ऑब्जेक्ट्स को उनके इंडेक्स के साथ-साथ नाम से एक्सेस करने में भी सक्षम होना चाहिए।

किसी भी विचार के लिए आभारी होंगे।मैं एक हैशसेट वर्णानुक्रमित आदेश कैसे रखूं?

+1

आप का प्रयास किया था 'TreeMap'? – Santosh

उत्तर

11

आप TreeMap

एक लाल-काले पेड़ आधारित NavigableMap कार्यान्वयन का उपयोग कर सकते हैं। नक्शा को अपनी चाबियों के प्राकृतिक क्रम के अनुसार क्रमबद्ध किया जाता है, या नक्शा निर्माण समय पर प्रदान किए गए एक तुलनाकर्ता द्वारा, किस कन्स्ट्रक्टर का उपयोग किया जाता है, इस पर निर्भर करता है।

+0

ऐसा लगता है कि मुझे यही चाहिए। धन्यवाद। – svz

+0

यह गलत जवाब है। एक ट्रीमैप सेट की तरह एकवचन की गारंटी नहीं देता है। – checklist

+0

के बजाय ट्रीसेट का उपयोग करें नोट: ट्रीसेट में डुप्लिकेट ऑब्जेक्ट्स की अनुमति नहीं है लेकिन TreeMap में अनुमति है। – Yuci

0

मैं एक ट्रीसेट का उपयोग करूंगा जो सॉर्टेडसेट है। आपको नाम के आधार पर अपनी कस्टम क्लास को तुलनात्मक रूप से परिभाषित करने की आवश्यकता है और आपका संग्रह हमेशा सॉर्ट किया जाएगा।

नोट: सॉर्ट किए गए संग्रह में ओ (लॉग एन) एक्सेस टाइम होता है।

0

आप TreeMap को देखा है? यह रेड-ब्लैक पेड़ से आधारित है जो ऑर्डरिंग को बनाए रखने में मदद करता है, लेकिन फिर भी तेज़ पहुंच देता है।

14

क्यों TreeSet कोशिश नहीं। क्या आपकी सूची डुप्लिकेट की अनुमति नहीं देती है? यदि ऐसा है तो सेट ठीक होना चाहिए। आप तार जोड़ रहे हैं और इस सेट तुलनित्र लागू करता है के रूप में स्वचालित रूप से करने के लिए आप

हल हो जाएगा आप था

Set<String> s = new TreeSet<String>(); 
s.add("B"); 
s.add("C"); 
s.add("A"); 

फिर सेट की सामग्री को ए, बी, सी

0

एक TreeMap होगा अपनी आवश्यकताओं को संबोधित करना चाहिए। यदि आपकी चाबियां अक्षर नहीं हैं तो TreeMap कन्स्ट्रक्टर में उपयुक्त Comparator का उपयोग करें।

0

आप Comparator उपयोग कर सकते हैं ..

Collections.sort(yourCollection, new Comparator() { 

    public int compare(YourObject o1, YourObject o2) { 
     // put Comparesion according to your requirement 
     return AnyObject; 
    } 
});