List<T>
एक सरणी T[]
का मालिक है। यह इस सरणी के लिए घातीय वृद्धि रणनीति का उपयोग करता है, इसलिए n
तत्वों वाली एक सूची में आम तौर पर n
से बड़े आकार के साथ बैकिंग सरणी होती है। इसके अलावा छोटे सरणी को कचरा इकट्ठा करने की आवश्यकता होती है, जो लोहे पर होने के लिए पर्याप्त होने पर परेशान हो सकती है।
लेकिन आप मैन्युअल रूप से क्षमता निर्दिष्ट करके इसे से बच सकते हैं, उदाहरण के लिए एक निर्माता पैरामीटर के रूप में। फिर वांछित क्षमता वाला एक सरणी आवंटित की जाएगी, इसलिए आप उपरोक्त दोनों समस्याओं से बचें।
इसके अलावा List<T>
में सूची ऑब्जेक्ट के लिए एक छोटा ओ (1) ओवरहेड है।
लेकिन जेनिक्स का उपयोग करते समय प्रति तत्व ओवरहेड नहीं है। रनटाइम आपके द्वारा पास किए जाने वाले प्रत्येक मान प्रकार के लिए एक विशेष संस्करण बनाता है। तत्वों का कोई मुक्केबाजी नहीं होता है।
लेकिन आप सी ++ शैली टेम्पलेट विशेषज्ञता का उपयोग नहीं कर सकते हैं, जहां आप प्रभावी रूप से कुछ प्रकार के पैरामीटर के लिए कार्यान्वयन को अधिभारित करते हैं। सभी जेनेरिक इंस्टीटेशंस समान सी # कोड साझा करते हैं।
यानी कोई विशेष आईएल कोड नहीं है, लेकिन प्रत्येक मान प्रकार को एक ही स्रोत कोड के आधार पर एक विशेष मशीन कोड कार्यान्वयन मिलता है।
आप यह कहना चाहते हैं कि सूची <> कार्यान्वयन की बात आती है तो एक सरणी है? –
@ डैनियल: हाँ, एक बढ़ने योग्य सरणी। – sepp2k
@ डैनियलमोस्मंडर: [हां] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx): * सूची (टी का) वर्ग अर्रेलिस्ट वर्ग का सामान्य समकक्ष है। यह एक सरणी का उपयोग करके आईएलआईस्ट (टी) जेनेरिक इंटरफ़ेस लागू करता है जिसका आकार गतिशील रूप से आवश्यकतानुसार बढ़ाया जाता है। * – Jon