java - जावा क्लास जो मानचित्र लागू करती है और सम्मिलन आदेश रखती है?




dictionary key-value (6)

LinkedHashMap नक्शे के keySet (), entrySet () या मान () पर पुनरावृत्ति करते समय उन्हें मानचित्र में डाले गए क्रम में तत्वों को वापस कर देगा।

Map<String, String> map = new LinkedHashMap<String, String>();

map.put("id", "1");
map.put("name", "rohan");
map.put("age", "26");

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

यह तत्वों को मानचित्र में रखे क्रम में मुद्रित करेगा:

id = 1
name = rohan 
age = 26 

मैं जावा में एक कक्षा की तलाश में हूं जिसमें कुंजी-मूल्य संघ है, लेकिन हैश का उपयोग किए बिना। यहां मैं वर्तमान में क्या कर रहा हूं:

  1. Hashtable मान जोड़ें।
  2. Hashtable.entrySet() लिए एक इटरेटर प्राप्त करें।
  3. सभी मूल्यों के माध्यम से Iterate और:
    1. इटरेटर के लिए एक Map.Entry प्राप्त करें। प्रवेश करें।
    2. मूल्य के आधार पर प्रकार Module (एक कस्टम क्लास) का ऑब्जेक्ट बनाएं।
    3. कक्षा को जेपीनल में जोड़ें।
  4. पैनल दिखाएं

इसके साथ समस्या यह है कि मेरे पास इस आदेश पर नियंत्रण नहीं है कि मुझे मान वापस मिलते हैं, इसलिए मैं किसी दिए गए क्रम में मान प्रदर्शित नहीं कर सकता (ऑर्डर को हार्ड कोडिंग किए बिना)।

मैं इसके लिए एक ArrayList या Vector उपयोग करूंगा, लेकिन बाद में कोड में मुझे किसी दिए गए कुंजी के लिए Module ऑब्जेक्ट को पकड़ने की आवश्यकता है, जिसे मैं ArrayList या Vector साथ नहीं कर सकता।

क्या किसी को एक मुक्त / मुक्त स्रोत जावा क्लास के बारे में पता है जो यह करेगा, या जब उन्हें जोड़ा गया था, तो उसके आधार पर Hashtable से मूल्य प्राप्त करने का एक तरीका?

धन्यवाद!


आप LinkedHashMap का उपयोग मानचित्र में मुख्य सम्मिलन आदेश में कर सकते हैं

जावा लिंक्ड हैशैप वर्ग के बारे में महत्वपूर्ण बिंदु हैं:

  1. इसमें केवल तत्व तत्व होते हैं।
  2. एक LinkedHashMap में कुंजी 3 के आधार पर मान होते हैं। इसमें एक शून्य कुंजी और एकाधिक शून्य मान हो सकते हैं। 4. यह हैश मैप के समान है, इसके बजाय सम्मिलन आदेश बनाए रखता है

सार्वजनिक वर्ग LinkedHashMap मानचित्र हैश मैप लागू करता है मानचित्र

लेकिन यदि आप उपयोगकर्ता द्वारा निर्धारित ऑब्जेक्ट या किसी भी आदिम डेटा प्रकार कुंजी का उपयोग करके मानचित्र में क्रमबद्ध मूल्य चाहते हैं तो आपको TreeMap का उपयोग करना चाहिए अधिक जानकारी के लिए इस लिंक का EXplaination



जब भी मुझे समय से पहले ज्ञात चीजों के प्राकृतिक क्रम को बनाए रखने की आवश्यकता होती है, तो मैं EnumMap उपयोग करता EnumMap

कुंजी enums होगा और आप किसी भी क्रम में डाल सकते हैं लेकिन जब आप पुनरावृत्त करते हैं तो यह enum आदेश (प्राकृतिक क्रम) में पुनरावृत्त होगा।

इसके अलावा EnumMap का उपयोग करते समय कोई टकराव नहीं होना चाहिए जो अधिक कुशल हो सकता है।

मुझे सचमुच लगता है कि enumMap का उपयोग साफ पठनीय कोड के लिए बनाता है। यहां एक example


मैं एक LinkedHashMap या एक TreeMap सुझाव देते हैं। एक LinkedHashMap कुंजी को उस क्रम में रखता है जो उन्हें डाला गया था, जबकि एक TreeMap को एक Comparator माध्यम से या तत्वों के प्राकृतिक Comparable क्रम के माध्यम से क्रमबद्ध रखा जाता है।

चूंकि इसे तत्वों को सॉर्ट करने की आवश्यकता नहीं है, LinkedHashMap अधिकांश मामलों के लिए LinkedHashMap तेज होना चाहिए; Javadocs के अनुसार, TreeMap है O(log n) प्रदर्शन के लिए containsKey , get , put और remove , जबकि LinkedHashMap प्रत्येक के लिए O(1) है।

यदि आपका एपीआई केवल एक अनुमानित सॉर्ट ऑर्डर की अपेक्षा करता है, एक विशिष्ट सॉर्ट ऑर्डर के विपरीत, इन दो वर्गों को लागू करने वाले इंटरफेस का उपयोग करने पर विचार करें, SortedMap या SortedMap । यह आपको अपने एपीआई में विशिष्ट कार्यान्वयन को रिसाव नहीं करने और बाद में उन विशिष्ट वर्गों या पूरी तरह से अलग कार्यान्वयन पर स्विच करने की अनुमति देगा।


यदि एक अपरिवर्तनीय मानचित्र आपकी आवश्यकताओं के अनुरूप है तो Google द्वारा एक लाइब्रेरी है जिसे guava कहा जाता है (यह भी नक्शा प्रश्न देखें )

guava विश्वसनीय उपयोगकर्ता द्वारा निर्दिष्ट पुनरावृत्ति आदेश के साथ एक ImmutableMap प्रदान करता है। इस ImmutableMap में ओ (1) प्रदर्शन है, है, प्राप्त करें। स्पष्ट रूप से डालें और हटाएं समर्थित नहीं हैं।

ImmutableMap ऑब्जेक्ट्स of() और copyOf() या Builder ऑब्जेक्ट की सुरुचिपूर्ण स्थैतिक सुविधा विधियों of() उपयोग कर बनाए जाते हैं।





key-value