मैं अपने कार्यक्रमों में HashMap
का उपयोग करता हूं, क्योंकि मुझे पता है कि यह आमतौर पर सबसे कुशल (यदि सही ढंग से उपयोग किया जाता है) और आसानी से बड़े मानचित्रों का सामना कर सकता है। मुझे EnumMap
पता है जो गणना कुंजी के लिए बहुत उपयोगी है, लेकिन अक्सर मैं एक छोटा नक्शा उत्पन्न कर रहा हूं जो कभी भी बहुत बड़ा नहीं होगा, जल्द ही इसे छोड़ दिया जा सकता है, और इसमें कोई सहमति नहीं है।मैप <K,V> का कौन सा कार्यान्वयन मुझे उपयोग करना चाहिए यदि मेरे मानचित्र को तेज़ से छोटा होना चाहिए?
HashMap<K,V>
इन छोटे, स्थानीय और अस्थायी उपयोगों के लिए बहुत जटिल है? क्या कोई और सरल, कार्यान्वयन है जिसका मैं इन मामलों में उपयोग कर सकता हूं?
मुझे लगता है कि मैं Map
कार्यान्वयन की तलाश में हूं जो ArrayList
List
के लिए समान है। क्या यह अस्तित्व में है?
बाद में प्रतिक्रियाओं के बाद जोड़ा गया:
यहाँ एक परिदृश्य में जहाँ एक धीमी लेकिन बहुत सरल कार्यान्वयन बेहतर हो सकता है है - जब मैं कई है, ये Map
रों के कई। मान लीजिए, उदाहरण के लिए, मेरे पास इन छोटे छोटे मानचित्रों में से एक लाख या उससे अधिक हैं, जिनमें प्रत्येक एक मुट्ठी भर (अक्सर तीन से कम) प्रविष्टियों के साथ होता है। मेरे पास कम संदर्भ दर है - शायद मैं ज्यादातर समय उन्हें त्यागने से पहले संदर्भित नहीं करता हूं। क्या यह अभी भी मामला है कि HashMap
उनके लिए सबसे अच्छा विकल्प है?
संसाधन उपयोग केवल गति से अधिक है - मुझे ऐसा कुछ चाहिए जो ढेर को बहुत कम नहीं करता है और उदाहरण के लिए जीसी को लंबा समय लगता है।
यह हो सकता है कि HashMap
सही उत्तर है, लेकिन यह समयपूर्व अनुकूलन (या कम से कम यह नहीं हो सकता है) का मामला नहीं है।
जोड़ा बहुत बाद में कुछ विचार के बाद:
मैं करने के लिए हाथ से कोड अपने ही SmallMap
फैसला किया। AbstractMap
के साथ एक बनाना आसान है। मैंने कुछ रचनाकार भी जोड़े हैं ताकि SmallMap
मौजूदा Map
से बनाया जा सके।
जिस तरह से मुझे यह तय करना था कि Entry
एस का प्रतिनिधित्व कैसे करें और entrySet
विधि के लिए SmallSet
लागू करने के लिए।
मैंने कोडिंग (और यूनिट-टेस्टिंग) द्वारा बहुत कुछ सीखा और इसे साझा करना चाहते हैं, अगर कोई और चाहता है। यह github here पर है।
बस 'हैश मैप' का उपयोग करें और उचित प्रारंभिक क्षमता निर्धारित करें, आप उससे बेहतर नहीं कर सकते (जब तक कि आप निश्चित रूप से 'EnumMap' का उपयोग नहीं कर सकते)। – Viruzzo
BigSlowMap और FastSmallMap होने का कारण यह नहीं है कि मूल कार्यान्वयन पर्याप्त अनुकूलनीय है। – Viruzzo
[यह] के जवाब भी देखें (http://stackoverflow.com/questions/633299/anyone-now-of-a-java-util-map-implementation-optimized-for-low-memory-use) प्रश्न। –