2011-07-27 11 views
8

एक त्वरित सवाल जो शायद लंगड़ा है।जावा मानचित्र में <इंटीगर, डबल []>, क्या मुझे डबल [] को प्राप्त करने और संशोधित करने की आवश्यकता है?

निम्न कोड में:

Map<Integer, Double[]> dataMap = new Map<Integer, Double[]>(); 
dataMap.put(1, new Double[]{100,100}); 
Double[] dob = dataMap.get(1); 
dob[0] = 100; 
dob[1] = 200; 
dataMap.put(1, dob); 

पिछले "dataMap.put" अनुदेश आवश्यक है? या dataMap.get (1) सरणी के लिए एक संदर्भ उत्पन्न करेगा जिसे बाद में बाद के बयान में संशोधित किया जाएगा।

मुझे पता है कि, परिवर्तनीय वस्तुओं (जैसे मानचित्र) के मामले में, Map.get() मुझे वांछित वस्तु का संदर्भ देगा, हालांकि डबल्स की एक सरणी के साथ (जिसका तत्व प्रकार उदा। Double अपरिवर्तनीय हैं) I मुझे यकीन नहीं है कि मुझे मानचित्र में सरणी का संदर्भ मिलता है या नहीं।

धन्यवाद!

उत्तर

17

नहीं, अंतिम विवरण आवश्यक नहीं है - क्योंकि नक्शा में केवल ऐरे के संदर्भ हैं, जैसा आपने उल्लेख किया है। एक सरणी एक म्यूटेबल ऑब्जेक्ट है, भले ही Double नहीं है - यह setName(String) विधि के साथ ऑब्जेक्ट होने जैसा है - सिर्फ इसलिए कि String अपरिवर्तनीय है, कंटेनर प्रकार नहीं है।

ध्यान दें कि अगर आप ऐसा करते हैं, एक और धागा दूसरा तत्व 200 करने के लिए सेट देखे बिना आधा परिवर्तन (अर्थात 100 के लिए पहला तत्व की सेटिंग) देख सकते हैं कि ठीक है? यदि नहीं, तो आप के बजाय एक नई सरणी बनाने के बारे में सोच सकता है:

Map<Integer, Double[]> dataMap = new HashMap<Integer, Double[]>(); 
dataMap.put(1, new Double[]{100,100}); 
// Other stuff... 

// Replace value in map with a reference to a different array. 
Double[] dob = new Double[] { 100, 200 }; 
dataMap.put(1, dob); 

यह आपको एक धागा सुरक्षित मानचित्र का उपयोग कर रहे के पाठ्यक्रम के साथ शुरू करने के लिए, यह मानते हुए है ...

+0

अच्छा जवाब, बहु थ्रेडिंग टिप के लिए धन्यवाद। – obaqueiro

1

Double स्वयं अपरिवर्तनीय है, लेकिन जहां तक ​​सरणी का संबंध है, वह अप्रासंगिक है।

प्रत्येक Double को अविनाशी बॉक्स के रूप में सोचें। भले ही बक्से अविनाशी हैं, फिर भी आप उन्हें अभी भी फेंक सकते हैं और उन्हें अपनी सूची के संबंध में कहीं और बदल सकते हैं।

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