2008-12-03 21 views
5

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

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

क्या इसके लिए जावा मानक पुस्तकालयों में कुछ पहले से ही उपलब्ध है?

+0

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

उत्तर

8

एक शानदार writeup on java collections है जो आपकी अधिकांश आवश्यकताओं को शामिल करता है।

इस बारे में छोटी सलाह: एक कस्टम तुलनाकर्ता के साथ TreeMap (तुलनात्मक सी) का उपयोग करें। कुंजी स्ट्रिंग hrs IST, मूल्य स्ट्रिंग और संख्या

+0

जावा संग्रह के लिए आपके लिंक के लिए धन्यवाद। मैं जावा में कुछ देख रहा हूं जो स्ट्रॉस्ट्रप के सी ++ एसटीएल के वर्णन से तुलनीय है, और ऐसा लगता है कि यह है। – Rich

3

यह ध्वनि SortedMap की तरह है। स्ट्रिंग के साथ कुंजी और संख्या के रूप में संख्या के रूप में।

+0

आह ठीक है। धन्यवाद। यह अपेक्षा से आसान था। –

+0

ऐसा लगता है कि सॉर्टेड मैप एक इंटरफ़ेस है जिसे कार्यान्वित करने की आवश्यकता है, जिस तरह से (जो ट्रीएप मैप करता है)। –

2

सॉर्टेड मैप के अलावा, आपके पास

TreeSet<Pair<String, Number>>
हो सकता है जहां आप जोड़ों को क्रमबद्ध करने के लिए तुलनित्र की आपूर्ति करते हैं (या अपनी जोड़ी कक्षा को तुलनात्मक रूप से कार्यान्वित करते हैं और वहां करते हैं)।

यह वस्तुओं डेटा संरचना से अलग है, और इस तरह एक छोटी सी उदाहरण के लिए, जबकि यह एक बड़ी बात नहीं है, तो आप कल्पना कर सकते हैं कि एक TreeSet <MyObject> जहां MyObject तुलनीय लागू करता है लंबे समय तक में grok आसान है रहता है अवधि।

+0

मुझे लगता है कि कुछ परीक्षण लिखने लायक है, अब आपके पास सॉर्टेड मैप, ट्रीसेट और ट्रीएप सुझाव हैं! मुझे लगता है कि ट्रीएक्सवाईड एक इटरेटर प्राप्त करने के लिए तेज़ होगा, मैप्स सम्मिलन/पुनर्प्राप्ति के लिए तेज़ी से। तो शायद TreeMap कुल मिलाकर सबसे अच्छा विकल्प है। – JeeBee

+0

मैं उन पर पढ़ने के बाद ऐसा कर सकता हूं। धन्यवाद। –

+0

@JeeBee: TreeMap एकमात्र ऐसा मानचित्र है जो जावा मानक API में सॉर्टेड मैप इंटरफ़ेस लागू करता है। – Powerlord

1

आप सूची में वस्तुओं के बीच डुप्लिकेट स्ट्रिंग मान है, तो साथ समग्र वस्तु है, तो आप Google Collections' TreeMultimap को देखने के लिए चाहते हो सकता है। TreeMultimap के साथ, न केवल चाबियाँ क्रमबद्ध की जाती हैं, लेकिन एक ही कुंजी वाले सभी मान भी संग्रह में संग्रहीत होते हैं।

Multimap<String, Pair> mm = new TreeMultimap<String, Pair>(
     new Comparator<String>(){...}, 
     new PairComparator()); 
mm.put("A", new Pair("A", 1)); 
mm.put("B", new Pair("B", 2)); 
mm.put("B", new Pair("B", 3)); 
Collection values = mm.values(); 
    // values are [Pair("A", 1), Pair("B", 2), Pair("B", 3)] 
Collection bValues = mm.get("B"); 
    // bValues are [Pair("B", 2), Pair("B", 3)] 
-1

मुझे लगता है कि करने के लिए कुछ इसी तरह किया है, मैं उन्हें वस्तुओं की दुकान और ArrayList छँटाई के लिए तुलनाकारक लिखने के लिए ArrayList का इस्तेमाल किया।

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