हां इससे कोई फर्क पड़ता है।
जावा में, 2 डी सरणी 1 डी सरणी की एक सरणी है, और सरणी (सभी ऑब्जेक्ट्स की तरह) में तत्वों को स्वयं रखने के लिए आवश्यक स्थान के अतिरिक्त शीर्षलेख होते हैं।
तो int[10][2]
बनाम int[2][10]
पर विचार करें, और 32 बिट जेवीएम मानें।
int[2][10]
में 2 तत्वों की एक सरणी और 10 तत्वों के 2 सरणी शामिल हैं। कुल - 3 सरणी वस्तुओं + 22 तत्व।
int[10][2]
में 10 तत्वों की एक सरणी और 2 तत्वों के 10 सरणी शामिल हैं। कुल - 11 सरणी वस्तुओं + 30 तत्व।
अगर हम मान लेते हैं कि शीर्ष लेख का आकार 3 32 बिट शब्द (एक 32bit JVM के लिए विशिष्ट) और एक संदर्भ है 1 32 बिट शब्द, तो
int[2][10]
लेता है 3 * 3 + 22 है * 1 = 31 शब्द = 124 बाइट्स
int[10][2]
11 * 3 + 30 * 1 = 63 शब्द = 252 बाइट्स लेता
यही तर्क लागू करें और आप आयामों की अधिक संख्या के सरणियों के आकार का अनुमान कर सकते हैं।
लेकिन यह स्पष्ट है कि यदि आप सबसे बड़ा आयाम सही है तो आप कम जगह का उपयोग करते हैं।
मैं int
सरणियों के साथ गणित किया है, लेकिन एक 32 बिट मशीन पर एक int
और एक reference
बाइट्स की एक ही नंबर पर कब्जा। एक 64 बिट मशीन पर, एक संदर्भ int
या long
के समान आकार के समान हो सकता है, JVM विकल्पों के आधार पर। हेडर आकार भी अलग हो सकते हैं .... बिल्कुल सही नहीं ... संभावित रूप से प्लेटफार्म निर्भर है।
मैंने Bitmap
वस्तुओं को स्वयं रखने के लिए आवश्यक स्थान के लिए जिम्मेदार नहीं ठहराया है, लेकिन यह वही है जब आप सरणी व्यवस्थित करते हैं।
स्रोत
2013-03-11 13:09:38
धन्यवाद! मेरा एक सवाल है। हो सकता है कि स्मृति को सहेजने का सबसे अच्छा तरीका 'बिटमैप [] सी = नया बिटमैप [2 * 1000] 'और बाद में सूचकांक की तरह' 1000 * i + j' होगा? 'बिटमैप [2] [1000]' की तुलना में कोई गति अंतर नहीं होगा? –
1) हां ... हालांकि यह आपके कोड को पढ़ने के लिए कठिन बनाता है और वृद्धिशील बचत बहुत अच्छी नहीं है। 2) एक 1 डी सरणी * हो सकता है * तेज हो क्योंकि कम सरणी सीमाएं और कम fetches हैं। हालांकि, अंतर में कोई अंतर बनाने के लिए अंतर बहुत छोटा है। –
ध्यान दें कि उदाहरण के लिए 64 बिट हॉटस्पॉट पर, संदर्भ डिफ़ॉल्ट रूप से 4 बाइट्स पर संपीड़ित होते हैं। – assylias