2009-07-31 23 views
19

मैं सोच रहा था कि वहां कोई कक्षा है जो Map और List जावा में इंटरफेस लागू करता है।जावा में आदेश सूची मानचित्र कार्यान्वयन

मैं एक डेटा संरचना मुख्य रूप से एक Map है कि है। मैं स्ट्रिंग्स (आईडी) को Image एस पर मैप करता हूं। लेकिन मेरे कोड के एक विशिष्ट भाग में, मैं सभी उपलब्ध ided Images के साथ उपयोगकर्ता पेश करने के लिए की जरूरत है।

for (String id : myMap.keySet()) { 
    // get the image like this "myMap.get(id)" 
} 

तो यह एक वर्ग है कि दोनों Map और List लागू करता है करने के लिए अच्छा होगा तो मैं बस लिख सकते हैं::

for (Image img : myMap) { 
    // the image is img 
} 

किसी को भी करता है कि ऐसा करने के लिए अब तक का एकमात्र तरीका यह लिखने के लिए है इस तरह के एक कार्यान्वयन के बारे में पता है?

EDIT: उत्तरों को देखने के बाद (जो सभी सही हैं, वोट किए गए हैं), अब मुझे एहसास है कि मुझे क्रमबद्ध करने के लिए मानचित्र की भी आवश्यकता होगी। जब मैं कहता हूँ "हल कर", सभी मेरा मतलब है कि मैं इसे चाहते हैं एक विशेष क्रम, एक कि मैं संशोधित करने के लिए सक्षम हो जाएगा में मान है। मुझे पता है कि यह मूल सवाल नहीं है, लेकिन मुझे अभी एहसास हुआ कि मुझे इसकी आवश्यकता है।

संपादित करें 2: ऐसा लगता है कि मैं अनिश्चित हूं। मुझे एक आदेश दिया गया नक्शा है, एक क्रमबद्ध नहीं है। भ्रम के लिए खेद है, लोग।

उत्तर

34

आप एक विशेष क्रम में अपने आइटम की जरूरत है, LinkedHashMap अपने दोस्त है - यह प्रविष्टि क्रम में आइटम रहता है। ट्रीमैप आपके आइटम को आपके द्वारा दिए गए एक तुलनात्मक द्वारा परिभाषित क्रम में रखेगा या तुलना करेगा कुंजी की विधि।

+0

धन्यवाद, यह वही है जो मुझे चाहिए। –

+0

आइटम ऑर्डर को बदलने में सक्षम होना अच्छा होगा हालांकि :( –

+0

मुझे लगता है कि आप इसे हटाने और फिर से डालने के द्वारा आइटम के अंत में आइटम को फिर से डाल सकते हैं। – Rorick

19

एक आदेश दिया मानचित्र के लिए, LinkedHashMap को देखो। यह प्रविष्टि के क्रम में आपकी चाबियाँ रखेगा।

आप एक SortedMap का उपयोग करते हैं यह क्रमबद्ध क्रम में कुंजी रखेंगे। (TreeMap सबसे आम कार्यान्वयन है।)

आप क्या उपयोग कर सकते हैं map.entrySet() है। इससे आपको MapEntries के सेट पर फिर से शुरू करने की अनुमति मिल जाएगी। थोड़ा और अधिक जानकारी के लिए बाहर javadoc

चेक।

+1

+1 छोटा और अच्छा जवाब। – bastianneu

+0

उत्तर के लिए धन्यवाद। कृपया मेरे संपादन की जांच करें क्योंकि मेरा प्रश्न थोड़ा बदल गया है। –

+0

धन्यवाद। मैं आमतौर पर लंबी हवाओं पर ब्रेवटी पसंद करते हैं। – jjnguy

2

यह आपको आप Map.values() विधि है, जो एक Collection रिटर्न उपयोग कर सकते हैं संग्रहीत मूल्यों

myMap.values() 
+0

अच्छा जवाब। कृपया मेरे संपादन की जांच करें क्योंकि मेरा प्रश्न थोड़ा बदल गया है। –

+0

ए हैश मैप हैश द्वारा क्रमबद्ध मूल्य संग्रह का उत्पादन करेगा - जो आम तौर पर आप नहीं चाहते हैं। तो जिंगयू के जवाब के साथ जाएं और एक TreeMap का उपयोग करें और फिर मूल्यों को कॉल करें()। – Stroboskop

3

का एक संग्रह प्रदान करता है।

+0

अच्छा जवाब। कृपया मेरे संपादन की जांच करें क्योंकि मेरा प्रश्न थोड़ा बदल गया है। –

2

इस प्रयास करें:

for (Image img : myMap.values()) { 
    // the image is img 
} 

java.util.SortedMap कार्यान्वयन पर क्रमबद्ध नक्शा देखने के लिए। java.util.TreeMap सबसे अधिक पसंद है। अगर आपको केवल गारंटीकृत आदेश की आवश्यकता है तो आप java.util.LinkedHashMap आज़मा सकते हैं। यह उसी क्रम में पुनरावृत्ति प्रदान करता है जब आप तत्वों को मानचित्र में डालते हैं। या, वैकल्पिक रूप से, अंतिम-पहुंच वाले क्रम में। यदि आप मानचित्र के अंत में कुंजी (एक बार जोड़ा गया) ले जाना चाहते हैं, तो आपको इसे स्पष्ट रूप से हटा देना होगा और फिर से रखना होगा।

+0

अच्छा जवाब। कृपया मेरे संपादन की जांच करें क्योंकि मेरा प्रश्न थोड़ा बदल गया है। –

0

आप एक TreeMap इसे अपनी चाबियों का प्राकृतिक क्रम के अनुसार क्रमित है उपयोग कर सकते हैं, या नक्शा निर्माण समय पर प्रदान एक तुलनाकारी द्वारा:

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator()); 

जहां ByNameComparator() एक तुलनाकारी है। वैकल्पिक रूप से आप संग्रहों का उपयोग कर मान() मेथॉन्ड और सॉर्ट का उपयोग कर सकते हैं।प्रकार():

Collection<Image> images = mapByName.values(); 
Collections.sort(images, new BySizeComparator()); 
7

आपके पास पहले से ही व्यावहारिक उत्तरों का एक समूह है। लेकिन सीधे सवाल का जवाब ...

अगर वहां कोई कक्षा है जो जावा में मानचित्र और सूची इंटरफेस लागू करता है तो मैं घूम रहा था।

... यह उल्लेख करना उचित है कि यह असंभव है। remove(Object) विधि बाधा है।

Map इंटरफ़ेस में अपने हस्ताक्षर है:

V remove(Object key); 

और List इंटरफ़ेस में यह बताया गया है:

boolean remove(Object o); 
संबंधित मुद्दे