2012-05-25 15 views
14

संभव डुप्लिकेट:
When to use ArrayList over array[] in c#?ऐरे बनाम ऐरे सूची में महत्वपूर्ण अंतर?

स्मृति या प्रोसेसर लागत के दृष्टिकोण से, वहाँ एक सरणी और एक ArrayList वस्तु बीच एक महत्वपूर्ण अंतर होने के लिए प्रकट होता है?

+0

@ निखिल अग्रवाल उस विषय का डुप्लिकेट नहीं है क्योंकि प्रश्न विशेष रूप से प्रदर्शन अंतर के बारे में है, उपयोग संदर्भ नहीं। – Asik

+0

मुझे संदेह है कि ArrayList धीमा हो जाएगा क्योंकि आपको पुनर्प्राप्ति के दौरान सरणी में प्रत्येक तत्व डालना होगा। – Matthew

उत्तर

41

ऐरे (ए सिस्टम नेमस्पेस) एक डेटाटाइप है, जिसका उपयोग इंडेक्स को कॉल करके किया जा सकता है। रनटाइम के दौरान, जब तक आप सरणी की प्रतिलिपि बनाने और पुराने से छुटकारा पाने की विधि का उपयोग नहीं करते हैं, तब तक कोई भी सरणी के आकार को वास्तव में नहीं बदल सकता है।

.NET में, विजुअल स्टूडियो डेटा स्टोर करने के लिए एक विशेष कक्षा का उपयोग करता है। इस वजह से, प्रदर्शन वास्तव में काफी तेज़ है। यह भी इसलिए है क्योंकि किसी सरणी में, आपको आकार निर्दिष्ट करने की आवश्यकता होती है और इस प्रकार, डेटा दूसरे के बाद एक संग्रहित होता है।

उदाहरण:

int[] myNumbers= new int[5]; 
myNumbers[0] = 16; 

ArrayList (System.Collections नाम स्थान) एक डेटाप्रकार संग्रह है। एक ArrayList भरने के लिए, कोई भी विधि का उपयोग कर सकते हैं। ArrayLists इस अर्थ में बहुत गतिशील हैं कि जब आप इससे आइटम जोड़ते हैं और/या हटाते हैं, तो प्रदर्शन समान रहता है।

एक ऐरेलिस्ट की आंतरिक संरचना एक सरणी है।

उदाहरण:

ArrayList myArray = new ArrayList(); 
myArray.Add(“Steph”); 
string str = myArray[0]; 

अधिकांश समय, हम सरणियों के बजाय सरणी सूचियों का चयन करने के बाद से हम पता नहीं कितना बड़ा इसे बाहर बारी करने जा रहा है करते हैं। Arrays आदर्श हैं जब आप जानते हैं कि आप इसमें कितने आइटम डालने जा रहे हैं। जब भी संभव हो, एरे का उपयोग करने की अनुशंसा की जाती है क्योंकि यह प्रदर्शन में काफी सुधार करता है।

ऐरे समरूप डेटा का अनुक्रम है जबकि ऐरेलिस्ट हेटरोजेनस डेटा का अनुक्रम है। यही कारण है कि हमें ArrayLists में हर डेटा टाइप करना होगा।

Arrays multidimensional हैं लेकिन ArrayList हमेशा एकल-आयामी है।

Arrays दृढ़ता से टाइप किए जाते हैं, और पैरामीटर के रूप में अच्छी तरह से काम करते हैं। यदि आप अपने संग्रह की लंबाई जानते हैं और यह तय है, तो आपको एक सरणी का उपयोग करना चाहिए।

ऐरेलिस्ट दृढ़ता से टाइप नहीं किए जाते हैं, प्रत्येक सम्मिलन या रिट्रियल को आपके मूल प्रकार पर वापस जाने के लिए एक कलाकार की आवश्यकता होगी। यदि आपको किसी विशिष्ट प्रकार की सूची लेने के लिए किसी विधि की आवश्यकता है, तो ArrayLists कम हो जाते हैं क्योंकि आप किसी भी प्रकार वाले ऐरेलिस्ट में पास कर सकते हैं। ArrayLists आंतरिक रूप से एक गतिशील रूप से विस्तारित सरणी का उपयोग करते हैं, इसलिए जब यह इसकी क्षमता को हिट करता है तो आंतरिक सरणी के आकार का विस्तार करने के लिए भी एक हिट होती है।

+0

एक और वस्तु है जिसे सरल सूची कहा जाता है। यह एक ArrayList के साथ तुलना कैसे करता है। जो एक अधिक परिष्कृत नियंत्रण प्रतीत होता है। –

+2

एक सूची ऐरे और ऐरे सूची के अच्छे गुणों का संयोजन है। ऐरे की तरह इसमें समरूप डेटा होता है। ArrayList की तरह, आप जितना चाहें उतना डेटा जोड़ सकते हैं। –

6

एक सरणी निम्न स्तर की डेटा संरचना है जो अनिवार्य रूप से स्मृति में किसी क्षेत्र को मानचित्र बनाती है। एक ArrayList एक चर लंबाई लंबाई है जो object की सरणी के रूप में कार्यान्वित की गई है जो सूची बढ़ने के बाद फिर से आवंटित की जाती है।

ArrayList इसलिए आंतरिक सरणी के आकार के प्रबंधन से संबंधित कुछ ओवरहेड हैं, और सूची तक पहुंचने पर सही प्रकार के लिए कास्टिंग ऑब्जेक्ट से संबंधित अधिक ओवरहेड है।

इसके अलावा, object के रूप में सब कुछ संग्रहीत करने का अर्थ है कि मूल्य प्रकारों को लिखने पर बॉक्सिंग किया जाता है और पढ़ने पर अनबॉक्स किया जाता है, जो प्रदर्शन के लिए बेहद हानिकारक है। List<T> का उपयोग करके, एक समान लेकिन दृढ़ता से टाइप की गई चर आकार सूची इस समस्या से बचाती है।

वास्तव में, ArrayList को .NET 2.0 के बाद List<T> के पक्ष में व्यावहारिक रूप से बहिष्कृत किया गया है।

+0

एक और वस्तु है जिसे सरल सूची कहा जाता है। यह एक ArrayList के साथ तुलना कैसे करता है। जो एक अधिक परिष्कृत नियंत्रण प्रतीत होता है। –

+0

@ माइकऑल्सन मैंने समझाया कि मेरे उत्तर में पहले से ही ... क्या आपने इसे पढ़ा? – Asik

+0

क्षमा करें हाँ मैंने इसे पढ़ा लेकिन यह सुनिश्चित नहीं था कि सूची सरल सूची के समान ही थी। तो मूल रूप से इस सरल सूची ने उपयोग की आसानी के पक्ष में मूल रूप से ऐरे सूची को बदल दिया है? –

1

एक सरणी निश्चित आकार की स्मृति का एक संगत ब्लॉक है, जबकि एक ऐरेलिस्ट (हालांकि आपको .NET 2.0 के बाद से सूची पसंद करनी चाहिए) गतिशील रूप से आकार बदलने योग्य स्टोरेज प्रदान करने के लिए एक सरणी लपेटती है।

उनके बीच "अंतर", जहां तक ​​वे encapsulated हैं, एक ArrayList आकार बदलने योग्य है, एक सरणी नहीं है। जहां तक ​​कार्यान्वयन का संबंध है: क्योंकि एक ऐरेलिस्ट एरेज़ को लपेटता है (और फिर से आवंटित करता है) क्योंकि इसे सरणी की तुलना में थोड़ा अधिक स्मृति की आवश्यकता होगी (क्योंकि इसे इसकी क्षमता के विपरीत तत्वों की वर्तमान संख्या जाननी है), इसके अलावा एक ऐरेलिस्ट भी सीपीयू समय को फिर से आवंटित करने और इसकी आंतरिक सरणी की प्रतिलिपि बनाने की आवश्यकता होती है यदि यह कभी भी इसकी आंतरिक क्षमता तक पहुंच जाती है।

हालांकि, एक सरणीसूची को तुरंत चालू करना कोई सरणी आवंटित करने से अधिक महंगा नहीं है। ArrayList के राज्य को शुरू करने के लिए आवश्यक निर्देशों के मुकाबले केवल एक ही अंतर है। अंतर नगण्य है और चिंता करने योग्य नहीं है।

आप पाएंगे कि यदि आप एक आकार बदलने योग्य संग्रह बनाने के साधन के रूप में स्वयं द्वारा एक सरणी को फिर से आवंटित कर रहे हैं तो आप ArrayList/List का उपयोग करके बेहतर तरीके से उपयोग कर रहे हैं क्योंकि इसका पूरी तरह से परीक्षण किया गया है।

+1

एक अन्य वस्तु है जिसे सरल सूची कहा जाता है। यह एक ArrayList के साथ तुलना कैसे करता है। जो एक अधिक परिष्कृत नियंत्रण प्रतीत होता है। –

+0

ऐरेलिस्ट और जेनेरिक सूची के बीच मुख्य अंतर यह है कि जेनेरिक सूची टाइप सुरक्षित है जबकि सरणीसूची नहीं है। – DinoMyte

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