2010-07-11 19 views
5

इस समय मैं List<short> का उपयोग बफर के रूप में कुछ समय तक रखने के लिए कर रहा हूं, जबकि बफर के नीचे अन्य मानों के आधार पर प्रत्येक मान पर गणना की जाती है। तब मुझे एहसास हुआ कि यह शायद बहुत प्रभावशाली नहीं था क्योंकि मुझे बताया गया है कि List<> एक लिंक्ड सूची है इसलिए हर बार जब मैं whatever = myList[100]; करता हूं तो खराब चीज को पहले सभी मूल्यों को प्राप्त करने के लिए सभी अन्य नोड्स को कूदना पड़ता है। मैं नियमित ऐरे का उपयोग नहीं करना चाहता क्योंकि मुझे Add() और Remove() के कोड में अन्य स्थानों पर लात मारने का भार मिला है। इसलिए मुझे एक कक्षा की आवश्यकता है जो IList<T> प्राप्त करता है लेकिन नियमित सरणी डेटा संरचना का उपयोग करता है। क्या किसी को .NET में एक वर्ग पता है जो इस तरह से काम करता है इसलिए मुझे अपना खुद लिखना नहीं है? मैंने ऐरेलिस्ट का उपयोग करने की कोशिश की लेकिन यह सामान्य है!सूची डेटा संरचना सी # क्षमता

+3

ईमानदारी से, मुझे नहीं लगता कि आपको दक्षता के बारे में बहुत अधिक तनाव देना होगा। आपको प्राप्त होने वाले किसी भी लाभ को शायद ही ध्यान देने योग्य – lomaxx

+1

'सूची <> 'एक लिंक्डलिस्ट नहीं है। 'लिंक्डलिस्ट <>' हालांकि है। आप देख सकते थे कि क्योंकि किसी लिंक की गई सूची में यादृच्छिक पहुंच का खुलासा करने का कोई मतलब नहीं है। – Dykam

+0

सूची में अनुक्रमित पहुंच ओ (1) ऑपरेशन है। – digEmAll

उत्तर

1

नहीं, List<T> एक सामान्य संग्रह है, एक लिंक की गई सूची नहीं है। यदि आपको कार्यक्षमता जोड़ने और हटाने की आवश्यकता है तो List<T> कार्यान्वयन अधिकांश लोगों के लिए डिफ़ॉल्ट है।

+0

ठीक है, मेरा विचार धन्यवाद कि एक सूची <> एक लिंक की गई सूची गलत थी :( –

+0

यदि मामला सूची में नियमित सरणी के उपयोग के लिए कोई कारण है? –

+0

सादगी के लिए जब आप केवल एक निश्चित से निपट रहे हैं ऑब्जेक्ट्स की संख्या और संग्रह – thecoop

8

List<T> एक लिंक किए गए सूची कार्यान्वयन का उपयोग नहीं करता है। आंतरिक रूप से यह एक सरणी का उपयोग करता है, इसलिए ऐसा लगता है कि आपको वही चाहिए। ध्यान दें, क्योंकि यह एक सरणी है, सूची के आकार के आधार पर निकालें/सम्मिलित एक महंगी ऑपरेशन हो सकता है और स्थिति आइटम हटाया/डाला जा सकता है - ओ (एन)। आप इसका उपयोग कैसे कर रहे हैं इसके बारे में और जानने के बिना, हालांकि, बेहतर डेटा संरचना की सिफारिश करना मुश्किल है।

docs के टिप्पणियां अनुभाग से उद्धरण।

सूची (टी) कक्षा ArrayList कक्षा का सामान्य समकक्ष है। यह आईएलआईस्ट (टी) जेनेरिक इंटरफ़ेस को एक सरणी का उपयोग करके लागू करता है जिसका आकार आवश्यकतानुसार गतिशील रूप से बढ़ाया जाता है।

2

List<T> एक सरणी द्वारा समर्थित है, एक लिंक की गई सूची नहीं। List<T> की अनुक्रमित पहुंच निरंतर समय में होती है।

2

tvanfosson के सही उत्तर के अलावा, यदि आप कभी भी आंतरिक रूप से कुछ काम करने के बारे में अनिश्चित हैं, तो बस .NET Reflector लोड करें और आप देख सकते हैं कि चीजें कैसे लागू की जाती हैं।

public T this[int index] 
{ 
    get 
    { 
     if (index >= this._size) 
     { 
      ThrowHelper.ThrowArgumentOutOfRangeException(); 
     } 
     return this._items[index]; 
    } 
    // ... 

जहां आप देख सकते है कि this._items[index] सामान्य प्रकार T की एक सरणी है: इस मामले में, List<T> की इंडेक्सर के लिए नीचे ड्रिलिंग हमें निम्नलिखित कोड को दर्शाता है।

+1

क्योंकि परावर्तक अब मुक्त नहीं है, [ILSpy] (http://ilspy.net/) और [DotPeek] (http://www.jetbrains.com/decompiler/) अन्य निःशुल्क विकल्प हैं। –

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