LinkedList
और ArrayList
के बीच क्या अंतर है? मुझे कैसे पता चलेगा कि किस का उपयोग करना है?लिंक्डलिस्ट और ऐरेलिस्ट के बीच क्या अंतर है, और किसका उपयोग करना है?
उत्तर
या तो उपयोग न करें। System.Collections.Generic.List<T>
का उपयोग करें।
यह वास्तव में मेरी सिफारिश है। संभवतः स्वतंत्र रूप से आपका आवेदन क्या है, लेकिन यहां कुछ और रंग है, यदि आप ऐसा कुछ कर रहे हैं जिसके लिए यहां बारीकी से ट्यून किए गए विकल्प की आवश्यकता है।
ArrayList
और LinkedList
List
के लिए स्टोरेज तंत्र के विभिन्न कार्यान्वयन हैं। ArrayList
एक सरणी का उपयोग करता है जिसे आकार बदलना चाहिए यदि आपका संग्रह वर्तमान स्टोरेज आकार को बढ़ा देता है। दूसरी ओर LinkedList
सीएस 201 से लिंक की गई सूची डेटा संरचना का उपयोग करता है। LinkedList
कुछ सिर- या पूंछ-सम्मिलित भारी वर्कलोड के लिए बेहतर है, लेकिन ArrayList
यादृच्छिक एक्सेस वर्कलोड के लिए बेहतर है।
जब आप स्पष्ट रूप से पूछते हैं कि प्रत्येक (सरणी v। लिंक) सबसे अच्छा है तो आप हमेशा सरणी-आधारित सूची का उपयोग करने की अनुशंसा क्यों करेंगे? –
मेरा मुद्दा यह है कि आपको आमतौर पर पसंद पर अधिक परेशानी नहीं होती है। बेस क्लास लाइब्रेरीज़ में बहुत से स्थान हैं जहां आपको एक सूची वापस मिलती है चाहे आप जो चाहते हैं वह हो या नहीं। ('* .सूची()') 'लिंक्डलिस्ट' 'IList' को भी लागू नहीं करता है, इसलिए इसे स्वचालित रूप से 'सूची' संदर्भों में उपयोग नहीं किया जा सकता है। यदि आपको प्रदर्शन कारणों से 'लिंक्डलिस्ट' का उपयोग करने की आवश्यकता है, तो यह पूरी तरह से ठीक है, लेकिन औसतन आप लाभ से अधिक खो रहे हैं। – sblom
कोई भी नहीं कहा कि आपको परेशान होना चाहिए। यह आमतौर पर अपेक्षाकृत सरल निर्णय होता है। मुझे समझ में नहीं आता कि आपको क्यों लगता है कि आपको 'सूची' का उपयोग करना चाहिए क्योंकि मानक पुस्तकालय के कुछ हिस्सों में ऐसा होता है। 'लिंक्डलिस्ट' जानबूझकर लोगों को दुरुपयोग करने वाले लोगों को कम करने के लिए 'IList' को लागू नहीं करता है। यहां तक कि यह सच था कि "औसतन आप हार रहे हैं", ओपी ने औसत के बारे में नहीं पूछा था। उन्होंने * कब * प्रत्येक का उपयोग करने के बारे में पूछा। –
अंतर कैसे List
इंटरफ़ेस * कार्यान्वित किया जाता है के शब्दों में निहित है:
http://en.wikipedia.org/wiki/Arraylist और http://en.wikipedia.org/wiki/LinkedList
* मतलब basic list operations
आप इन विकिपीडिया लेखों पर प्रत्येक ऑपरेशन की एल्गोरिदमिक जटिलता की जांच कर सकते हैं। – pgb
इंटरफ़ेस 'IList
'सूची
अंतर आंतरिक डेटा संरचना करने के लिए प्रयोग किया जाता है वस्तुओं को स्टोर करें।
एक ArrayList
एक सिस्टम सरणी (जैसे Object[]
) का उपयोग करेगा और आवश्यकता होने पर इसका आकार बदल देगा। दूसरी ओर, LinkedList
उस ऑब्जेक्ट का उपयोग करेगा जिसमें सूची में अगली और पिछली वस्तुओं के लिए डेटा और पॉइंटर शामिल होगा।
आंतरिक प्रतिनिधित्व में इस अंतर के कारण विभिन्न परिचालनों में अलग-अलग एल्गोरिदमिक जटिलता होगी।
उनके पास "आवेषण" (नए तत्व जोड़ना) और लुकअप पर अलग प्रदर्शन है। आवेषण के लिए ArrayLists आंतरिक रूप से एक सरणी रखता है (प्रारंभ में 16 आइटम लंबा) और जब आप अधिकतम क्षमता तक पहुंचते हैं तो यह सरणी के आकार को दोगुना करता है। एक लिंक्डलिस्ट खाली हो जाता है और आवश्यकता होने पर एक आइटम (नोड) जोड़ता है।
मुझे लगता है कि एरेलेस्टिस्ट के साथ आप आइटम को इंडेक्स करने में सक्षम हैं, जबकि लिंक्डलिस्ट के साथ आपको सिर से आइटम "विज़िट" करना होगा (या लिंक्डलिस्ट यह आपके लिए स्वचालित रूप से करता है)।
लिंक्डलिस्ट में ओ (1) डिलीट भी हैं, जबकि 'सूची
ArrayList
और List<T>
, LinkedList<T>
, और अन्य समान जेनेरिक्स के बीच मुख्य अंतर यह है कि ArrayList
रखती Object
रों है, जबकि अन्य एक प्रकार है कि आपके द्वारा निर्दिष्ट पकड़ (यानी। List<Point>
केवल अंक रखती है)।
इस वजह से, आपको किसी भी वस्तु को ArrayList
से अपने वास्तविक प्रकार में डालने की आवश्यकता है। यदि आपके पास लंबी कक्षा के नाम हैं तो इसमें बहुत सी स्क्रीन स्पेस लग सकती है।
आम तौर पर List<T>
और अन्य टाइप किए गए जेनेरिक का उपयोग करना बेहतर होता है जब तक कि आपको वास्तव में इसमें कई अलग-अलग प्रकार की वस्तुओं के साथ एक सूची की आवश्यकता नहीं होती है।
ArrayList
में एक अच्छा प्रतिस्थापन है जो List<T>
है।
सामान्य तौर पर, List<T>
सरणी के लिए एक आवरण है - यह में अनुक्रमण और तक पहुँचने की अनुमति देता है आइटम हे (1), लेकिन, हर बार जब आप क्षमता से अधिक एक हे (एन) भुगतान किया जाना चाहिए।
LinkedList<T>
आप सूचकांक का उपयोग कर आइटम एक्सेस नहीं दूँगी लेकिन आप भरोसा कर सकते हैं कि डालने हमेशा खर्च होंगे हे (1)। इसके अतिरिक्त, आप सूची की शुरुआत में और मौजूदा वस्तुओं के बीच ओ (1) में आइटम सम्मिलित कर सकते हैं।
मुझे लगता है कि ज्यादातर मामलों में List<T>
डिफ़ॉल्ट विकल्प है। कई सामान्य परिदृश्यों में विशेष आदेश की आवश्यकता नहीं होती है और इसमें कोई सख्त जटिलता बाधा नहीं होती है, इसलिए List<T>
इसकी उपयोग सादगी के कारण पसंद किया जाता है।
जैसा कि @ एसब्लॉम ने कहा है, लिंक्डलिस्ट और ऐरेलिस्ट के सामान्य समकक्षों का उपयोग करें। वास्तव में ऐसा करने का कोई कारण नहीं है, और ऐसा करने के कई कारण हैं।
सूची < टी > कार्यान्वयन प्रभावी रूप से एक ऐरे लपेट रहा है। एक समर्थन सरणी की सीमा से परे तत्वों को सम्मिलित करने के उपयोगकर्ता का प्रयास, यह (काफी कीमत पर, buit पारदर्शी रूप से सूची के उपयोगकर्ताओं < टी > करने के लिए) एक बड़ा सरणी में कॉपी किया जायेगा चाहिए
एक LinkedList < टी > है पूरी तरह से अलग कार्यान्वयन जिसमें डेटा LinkedListNode < टी > उदाहरणों में होता है, जो दो अन्य लिंक्ड लिस्ट नोड < टी > उदाहरणों (या सूची के सिर या पूंछ के मामले में केवल एक) के संदर्भ में है। मध्य सूची आइटमों का कोई बाहरी संदर्भ नहीं बनाया गया है। इसका मतलब यह है कि सूची को फिर से चालू करना तेज है, लेकिन यादृच्छिक-पहुंच धीमी है, क्योंकि किसी को नोड्स को एक छोर या दूसरे से फिर से चालू करना होगा। लिंक्डलिस्ट का उपयोग करने का सबसे अच्छा कारण तेजी से आवेषण की अनुमति देना है, जिसमें नोड्स द्वारा आयोजित संदर्भों को बदलने के बजाय पूरी सूची को फिर से लिखने के बजाय नोड्स द्वारा आयोजित संदर्भों को बदलना शामिल है (जैसा कि सूची < टी > के साथ मामला है)
- 1. सूची और ऐरेलिस्ट के बीच क्या अंतर है?
- 2. Enums और Constants। किसका उपयोग करना है?
- 3. numpy arrays और matrices के बीच अंतर क्या हैं? मुझे किसका उपयोग करना चाहिए?
- 4. जावा में संग्रह और सूची के बीच क्या अंतर है?
- 5. आर में `=` और `<-` के बीच क्या अंतर है?
- 6. जी ++ और जीसीसी के बीच क्या अंतर है?
- 7. पोस्ट-प्राप्त और पोस्ट-अपडेट के बीच क्या अंतर है?
- 8. लोअरजी और आईटेक्स्ट के बीच क्या अंतर है?
- 9. प्राइम नंबर प्राप्त करने के लिए ऐरे और ऐरेलिस्ट के बीच क्या अंतर है?
- 10. $ और $$ के बीच क्या अंतर है?
- 11. `after_create` और 'after_save` के बीच क्या अंतर है और किस का उपयोग करना है?
- 12. # {} $ {} और% {} के बीच क्या अंतर है?
- 13. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 14. के बीच क्या अंतर है:। और: आर !?
- 15. भिन्नता और '-' के बीच क्या अंतर है?
- 16. "$^एन" और "$ +" के बीच क्या अंतर है?
- 17. लिंक्डलिस्ट वर्ग में तत्व() और getFirst() विधियों के बीच क्या अंतर है?
- 18. बंद पैरामीटर और 'उपयोग' कीवर्ड के बीच क्या अंतर है?
- 19. 'शामिल', 'विस्तार' और 'उपयोग' के बीच क्या अंतर है?
- 20. जेप्लेट और एप्लेट के बीच क्या अंतर है, और मुझे किस का उपयोग करना चाहिए?
- 21. अंतर और कहां के बीच क्या अंतर है?
- 22. file_get_contents और fread बीच क्या अंतर है
- 23. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 24. क्या बीच का अंतर है :: और ::: स्काला
- 25. सूची कार्यान्वयन: क्या लिंक्डलिस्ट वास्तव में इतनी खराब बनाम ऐरेलिस्ट और ट्रीलिस्ट करता है?
- 26. क्या अंतर है? : और ||
- 27. मॉडर्निजर, एचटीएमएल 5shiv, ie7.js, और CSS3 पाई। किसका उपयोग करना है और कब?
- 28. डीएल के फाइलवर्सन और उत्पादवर्जन के बीच क्या अंतर है?
- 29. रत्न और प्लगइन्स के बीच क्या अंतर है?
- 30. जेटीए और स्थानीय लेनदेन के बीच क्या अंतर है?
सरल ArrayList के लिए, कभी नहीं। जेनेरिक संग्रह 'IList' और संबंधित का उपयोग करें। –