2013-06-16 3 views
7

बस शीर्षक में पसंद है। क्या ऐसा कुछ ठीक करना है:क्या जावा में इंटीजर-कीड मैप्स बनाना ठीक है?

HashMap<Integer, Object> foo = new HashMap<>(); 

या शायद बेहतर कंटेनर है जो किसी भी इंडेक्स पर मूल्य जोड़ने की अनुमति देता है? "बेहतर" कहने पर मेरा मतलब है "बेहतर प्रदर्शन करना", और उसके बाद "कम रैम उपयोग होना"।

ArrayList<Object> bar = new ArrayList<>(); 
bar.add(10_000, new Object()); 

ए ऊपर इस कोड में कुछ ऐसा करना चाहता है, लेकिन यह निश्चित रूप से ArrayList के साथ काम नहीं करता है। सूची जो मैं बनाना चाहता हूं वह दुर्लभ है; इंडेक्स फैल गए हैं - यही कारण है कि मैं हैश मैप के बारे में सोच रहा था और ऐरेलिस्ट नहीं।

सम्मान।

+7

हां, आपके वर्णन के जैसा हैश मैप का उपयोग करना ठीक है। यह उदाहरण के लिए "स्पैस" सरणी बनाने के लिए किया जा सकता है। –

+4

आप बिना किसी समस्या के ऐसा कर सकते हैं, हालांकि सावधान रहें कि पूर्णांक _not_ को सॉर्ट नहीं किया जाएगा; यदि आप उन्हें सॉर्ट करना चाहते हैं, तो 'TreeMap' का उपयोग करें। यदि आप बेहतर प्रदर्शन के साथ कुछ विकल्प ढूंढ रहे हैं, तो जीएनयू ट्रोव मदद कर सकता है। – fge

+0

मुझे पता है कि मैं इसे कर सकता हूं, लेकिन मैं पूछ रहा हूं कि कोई बेहतर तरीका है :) धन्यवाद @ फेज, मैं इस जीएनयू ट्रोव को देखूंगा (हालांकि मैं कक्षाओं में निर्मित पसंद करता हूं :)) – m4tx

उत्तर

2

आप जो कर रहे हैं (प्रभाव में) HashMap का उपयोग एक स्पैस सरणी का प्रतिनिधित्व करने के लिए करना है।

यह एक उचित कार्यान्वयन विकल्प हो सकता है, लेकिन इसकी प्रभावकारिता आप जो हासिल करने की कोशिश कर रहे हैं, और सरणी के गुणों पर निर्भर करती है।

यदि सरणी पर्याप्त स्पैस है, तो आप एक साधारण सरणी के बजाय HashMap का उपयोग कर स्मृति को सहेज लेंगे। हालांकि एक गैर-स्पैस सरणी की तुलना में, HashMap एक सरणी की तुलना में लगभग अधिक मेमोरी का क्रम का उपयोग करता है। उस पर, get और putHashMap पर संचालन लगभग एक सरल सरणी को अनुक्रमणित करने की तुलना में धीमी गति का क्रम है।

इसके अलावा, आकार और सरणी काफी विरल पर निर्भर करता है, वहाँ दर्शाया जाए कि मिल/डाल प्रदर्शन की लागत कि पैमाने पर नहीं है पर एक HashMap की तुलना में काफी कम अंतरिक्ष (जैसे एंड्रॉयड विरल सरणी वर्ग) का उपयोग कर रहे हैं भी।

4

आपके प्रश्न बहुत सामान्य हैं, और आपके द्वारा निर्दिष्ट विवरणों से यह लगता है कि हैश मैप और ऐरेलिस्ट आपकी आवश्यकता के अनुरूप हैं और आप केवल प्रदर्शन के बारे में परेशान हैं। प्रदर्शन विभिन्न पहलुओं है:

  1. अपने डेटा सन्निहित या उससे कम प्रसार है, [यानी पूर्णांक हैं और अधिक या कम क्रम में] तो मैं ArrayList के लिए जाना होगा के रूप में प्रविष्टि की लागत कम HashMap की तुलना में है।
  2. यदि आपके डेटा में बहुत सारे फैले हुए हैं या यदि आप प्रविष्टि के साथ-साथ बहुत सारे डिलीवरी करने जा रहे हैं तो मैं हैश मैप के लिए जाऊंगा।

तो यह आपकी आवश्यकता पर निर्भर करता है।

संपादित करें: यदि डेटा में बहुत सारे फैले हैं तो हैश मैप जाने का रास्ता है। यदि आप ऐरे या ऐरेलिस्ट का उपयोग करते हैं तो डेटा की स्टोरेज के बीच बहुत सारी अंतराल के कारण आपकी मेमोरी खपत अधिक हो जाएगी। सम्मिलन की हैश मैप लागत ऐरे से अधिक है लेकिन फिर जब आप रैम के बारे में सोचते हैं, तो आपको हैश मैप के साथ जाना चाहिए।

+0

मेरे डेटा में बहुत सारे फैल गए हैं :) मैंने उस जानकारी को प्रश्न में जोड़ा। – m4tx

+0

मेरा संपादन देखें। मैं हैश मैप के साथ जाऊंगा। – Lokesh

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