2010-10-19 11 views
21

मैं एक HashMap उपयोग करने के लिए इस तरह एक स्ट्रिंग ArrayList के लिए एक अनूठा स्ट्रिंग मैप करने के लिए कोशिश कर रहा हूँ:जावा हैश मैप: इंडेक्स द्वारा कुंजी और मूल्य कैसे प्राप्त करें?

HashMap<String, ArrayList<String>> 

असल में, मैं, संख्या से कुंजी का उपयोग करने की कुंजी के नाम का उपयोग करके नहीं सक्षम होना चाहते हैं। और मैं उस पर फिर से शुरू करने के लिए कहा कुंजी के मूल्य तक पहुंचने में सक्षम होना चाहता हूं। मैं इस तरह कुछ सोच रहा हूं:

for(all keys in my hashmap) { 
    for(int i=0; i < myhashmap.currentKey.getValue.size(); i++) { 
     // do things with the hashmaps elements 
    } 
} 

क्या ऐसा करने का कोई आसान तरीका है?

+0

अगर आप चाहते हैं "केवल" बहुत पहले तत्व, देख http://stackoverflow.com/a/1936472/32453 – rogerdpack

उत्तर

26

आप map.keySet() फोन करके चाबियाँ पर पुनरावृति कर सकते हैं या map.entrySet() फोन करके प्रविष्टियों से अधिक पुनरावृति। प्रविष्टियों पर इटरेटिंग शायद तेज हो जाएगा।

for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
    List<String> list = entry.getValue(); 
    // Do things with the list 
} 

आप यह सुनिश्चित करें कि आप एक ही आपको डाला उन्हें फिर एक LinkedHashMap प्रयोग चाबियाँ पर पुनरावृति चाहते हैं।

वैसे, मैं मानचित्र के घोषित प्रकार को <String, List<String>> पर बदलने की अनुशंसा करता हूं। कार्यान्वयन के बजाय इंटरफ़ेस के संदर्भ में प्रकार घोषित करना हमेशा सर्वोत्तम होता है।

+0

अच्छा जवाब !!! तुमने मुझे इसे हराया :) – JJunior

7

हैशमैप्स का आदेश नहीं दिया जाता है, जब तक कि आप LinkedHashMap या SortedMap का उपयोग न करें। इस मामले में, आप LinkedHashMap चाहते हैं। यह सम्मिलन के क्रम में पुनरावृत्त होगा (या यदि आप चाहें तो अंतिम पहुंच के क्रम में)। इस मामले में, यह

int index = 0; 
for (Map.Entry<String,ArrayList<String>> e : myHashMap.iterator().entrySet()) { 
    String key = e.getKey(); 
    ArrayList<String> val = e.getValue(); 
    index++; 
} 

होगा वहाँ एक नक्शे में कोई सीधा get (इंडेक्स) है, क्योंकि यह कुंजी/मान जोड़े के बिना क्रम वाली सूची है। LinkedHashMap एक विशेष मामला है जो आदेश रखता है।

1

आप कर सकते हैं:

for(String key: hashMap.keySet()){ 
    for(String value: hashMap.get(key)) { 
     // use the value here 
    } 
} 

यह प्रत्येक कुंजी से संबद्ध सूची के हर मूल्य हर कुंजी पर पुनरावृति, और फिर।

+0

धन्यवाद करने के लिए: हालांकि, मैं जो एक वैकल्पिक दृष्टिकोण का उपयोग करना चाहते के लिए इस समाधान पोस्ट हर कोई जो उत्तर दिया। Jjnguy, यह वही है जो मैं चाहता था। आप भी, kkress। – Derek

+0

@ डेरेक, खुशी है कि मैं मदद कर सकता हूं। – jjnguy

0

हैशमैप्स आपके कुंजी/मूल्य जोड़े को एक विशिष्ट क्रम में नहीं रखता है। उन्हें हैश के आधार पर आदेश दिया जाता है कि प्रत्येक कुंजी का ऑब्जेक्ट.hashCode() विधि से आता है। आप तथापि वाले पुनरावर्तक का उपयोग कर कुंजी/मान जोड़े के समूह के ऊपर पुनरावृति कर सकते हैं:

for (String key : hashmap.keySet()) 
{ 
    for (list : hashmap.get(key)) 
    { 
     //list.toString() 
    } 
} 
2
for (Object key : data.keySet()) { 
    String lKey = (String) key; 
    List<String> list = data.get(key); 
} 
52

यहाँ सामान्य समाधान है अगर तुम सच में केवल पहले कुंजी के मूल्य

Object firstKey = myHashMap.keySet().toArray()[0]; 
Object valueForFirstKey = myHashMap.get(firstKey); 
+6

अच्छी तरह से बहुत सख्त होने के लिए ... ओपी * मूल्य * के लिए पूछा, * कुंजी * नहीं। तो हो सकता है कि आप 'ऑब्जेक्ट myValue = myMap.get (myKey); ' – avalancha

+0

जोड़ना चाहें, मुझे यकीन नहीं है कि' toArray() 'के' संभावित) ओवरहेड' iterator() को अगले() '... – Matthieu

0

आप वास्तविक कुंजी के बारे में परवाह नहीं करते हैं, एक संक्षिप्त तरीके से अधिक तेज़ी से दोहराने में सभी चाहते मानचित्र के मूल्यों अपने values() विधि का उपयोग किया जाएगा

Map<String, List<String>> myMap; 

for (List<String> stringList : myMap.values()) { 
    for (String myString : stringList) { 
     // process the string here 
    } 
} 

values() विधि मानचित्र इंटरफ़ेस का हिस्सा है और मानचित्र में मानों का संग्रह दृश्य देता है।

0

एक समाधान पहले से ही चुना गया है।

// use LinkedHashMap if you want to read values from the hashmap in the same order as you put them into it 
LinkedHashMap <String, ArrayList<String>> myhashmap = new LinkedHashMap <String, ArrayList<String>>(); 

// fill myhashmap ... 

// get the first value (arraylist) from the hashmap 
Map.Entry<String, ArrayList<String>> entry = (Map.Entry<String, ArrayList<String>>) myhashmap.entrySet().toArray()[0]; 
ArrayList<String> arrayList = entry.getValue(); 
संबंधित मुद्दे