2011-08-09 12 views
5

यहाँ HashMap में डेटा स्टोर और इटरेटरकैसे पुनरावर्तक से) सही क्रम में तत्वों (

public static void main(String args[]) { 
    HashMap<String, String> hm = new HashMap<String, String>(); 
    hm.put("aaa", "111"); 
    hm.put("bbb", "222"); 
    hm.put("ccc", "333"); 
    hm.put("ddd", "444"); 
    hm.put("eee", "555"); 
    hm.put("fff", "666"); 

    Iterator iterator = hm.keySet().iterator(); 

    while (iterator.hasNext()) { 
     String key = (String) iterator.next(); 
     String val = hm.get(key); 

     System.out.println(key + " " + val); 
    } 
} 

का उपयोग कर डेटा प्रदर्शित करने के लिए मेरे कोड है लेकिन यह जिस क्रम में मैं संग्रहीत में दिखाई नहीं दे रहा प्राप्त करने के लिए । क्या कोई मुझे बता सकता है कि मैं गलत कहां जा रहा हूं? मैं ऑर्डर में तत्व कैसे प्राप्त कर सकता हूं?

उत्तर

22

एक HashMap कोई गारंटी आदेश दिया गया है:

इस वर्ग के नक्शे के आदेश के रूप में कोई गारंटी नहीं देता;

LinkedHashMap का उपयोग करें।

अनुमानित पुनरावृत्ति आदेश के साथ मैश इंटरफेस के हैश तालिका और लिंक सूची सूची कार्यान्वयन।

6

आपको LinkedHashMap का उपयोग करने की आवश्यकता है क्योंकि यह हैश मैप के विपरीत, इसकी प्रविष्टियों का ऑर्डरिंग बनाए रखता है।

javadocs से:

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

+0

आपको बहुत बहुत धन्यवाद। अब मेरी समस्या हल हो गई है – Santhosh

2

HashMap जिस क्रम में हम में डेटा डाल नहीं रखता it.So आप LinkedHashMap instead.It जिस क्रम में हम डाल data.LinkedHashMap HashMap के रूप में ही इस्तेमाल किया जा सकता रखता है अनुसरण कर सकते हैं।

Map<key,value> map=new LinkedHashMap<key,value>(); 
map.put("key","value"); 
map.put("key","value"); 
map.put("key","value"); 

// इसी तरह आप डेटा too.It तक पहुँचने के लिए इटरेटर का उपयोग जिस क्रम में आप इसे करने के लिए जोड़ा में dfata प्रदर्शित करेगा कर सकते हैं।

+0

-1, डुप्लिकेट उत्तर। – mre

+0

डुप्लिकेट ??? मैं जवाब देने के बाद कभी कॉपी नहीं करता हूं। मुझे पता है कि मैंने पोस्ट किया था। इसका मतलब यह नहीं है कि मुझे क्या पता है कोई नहीं जानता? नकारात्मक निशान देने से पहले सोचो। –

+0

दूसरों द्वारा प्रदान किए गए उत्तरों को देखें। उन्होंने पहले ही समझाया है कि 'हैश मैप' ऑर्डर नहीं रखता है, और वैकल्पिक रूप से 'लिंक्ड हैशमैप' का उपयोग करने का सुझाव देता है। आपका उत्तर पहले से ही प्रदान किए गए कार्यों से कहीं ज्यादा कुछ नहीं प्रदान करता है। यह वास्तव में कम प्रदान करता है, क्योंकि आप javadocs से भी लिंक नहीं करते हैं। मैंने कुछ विचारों को कम वोट दिया था, और मैंने यह भी सुनिश्चित किया कि मैंने इसे अनामिक रूप से नहीं किया - आपका स्वागत है। – mre

0

कारण हैश मैप और हैशसेट संग्रहीत मूल्यों के आदेश की गारंटी नहीं देता है। तत्वों की स्थिति आंतरिक तालिका के आकार और कुंजी के हैशकोड पर निर्भर करेगी।

यदि आप कुछ डेटा में अपना डेटा लोड करना चाहते हैं तो आपको कुंजी/या मानों को सॉर्ट करने की आवश्यकता है। उदाहरण के लिए आप प्रविष्टियों के संग्रह (Map.entrySet()) को सूची में डाल सकते हैं और इच्छित किसी भी मानदंड से क्रमबद्ध कर सकते हैं। या आप अपनी ऑब्जेक्ट्स को स्टोर करने के लिए सॉर्टेड मैप (उदाहरण के लिए ट्रीमैप) का उपयोग कर सकते हैं।

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