java - सेट और सूची के बीच क्या अंतर है?




list set (18)

Set<E> और List<E> इंटरफेस के बीच मौलिक अंतर क्या है?


सूची:

List एस आमतौर पर डुप्लिकेट वस्तुओं की अनुमति देता है। List एस का आदेश दिया जाना चाहिए, और इसलिए सूचकांक द्वारा पहुंचा जा सकता है।

कार्यान्वयन कक्षाओं में शामिल हैं: ArrayList , LinkedList , Vector

सेट:

Set डुप्लिकेट ऑब्जेक्ट्स को अनुमति दें। अधिकांश कार्यान्वयन अनियंत्रित होते हैं, लेकिन यह कार्यान्वयन विशिष्ट है।

कार्यान्वयन कक्षाओं में शामिल हैं: LinkedHashSet ( LinkedHashSet ), LinkedHashSet (आदेश दिया गया), LinkedHashSet (प्राकृतिक आदेश द्वारा आदेश दिया गया या तुलनित्र द्वारा प्रदान किया गया)


1. सूची डुप्लिकेट मानों की अनुमति देता है और सेट डुप्लिकेट की अनुमति नहीं देता है

2. सूची उस क्रम को बनाए रखती है जिसमें आपने सूची में तत्व डाले हैं सेट सेट को बनाए रखता है। 3. सूची तत्वों का क्रमबद्ध अनुक्रम है जबकि सेट तत्वों की एक अलग सूची है जो अनियंत्रित है।


उत्तर की तरह एसईटी के पास डुप्लिकेट वैल्यू नहीं है और सूची कर सकती है। बेशक, ऑर्डर अलग-अलग चीजों को अलग करने के लिए एक और चीज है।


एक सूची में एक सेट में डुप्लिकेट तत्व नहीं हो सकते हैं। एक सूची (जावा में) भी आदेश का तात्पर्य है।


जावा में सूची और सेट के बीच कुछ नोट योग्य अंतर निम्नानुसार दिए गए हैं:

1) जावा में सूची और सेट के बीच मौलिक अंतर डुप्लिकेट तत्वों की अनुमति दे रहा है। जावा में सूची डुप्लिकेट की अनुमति देती है जबकि सेट किसी भी डुप्लिकेट की अनुमति नहीं देता है। यदि आप सेट में डुप्लिकेट डालते हैं तो यह पुराने मान को प्रतिस्थापित करेगा। जावा में सेट के किसी भी कार्यान्वयन में केवल अद्वितीय तत्व होंगे।

2) जावा में सूची और सेट के बीच एक और महत्वपूर्ण अंतर आदेश है। सूची एक ऑर्डर संग्रह है जबकि सेट एक अनियंत्रित संग्रह है। सूची तत्वों के सम्मिलन आदेश को बनाए रखती है, इसका मतलब है कि पहले डाला गया कोई भी तत्व निम्न तत्व पर जाने के बाद निम्न सूचकांक पर जाएगा। जावा में सेट कोई ऑर्डर नहीं बनाए रखता है। हालांकि सेट सॉर्टेडसेट नामक एक और विकल्प प्रदान करता है जो सेट में संग्रहीत ऑब्जेक्ट्स की तुलनात्मक और तुलनात्मक विधियों द्वारा परिभाषित विशिष्ट सॉर्टिंग ऑर्डर में सेट तत्वों को स्टोर कर सकता है।

3) जावा में सूची इंटरफेस के लोकप्रिय कार्यान्वयन में ऐरेलिस्ट, वेक्टर और लिंक्डलिस्ट शामिल हैं। जबकि सेट इंटरफ़ेस के लोकप्रिय कार्यान्वयन में हैशसेट, ट्रीसेट और लिंक्ड हैशसेट शामिल हैं।

यह बहुत स्पष्ट है कि यदि आपको सम्मिलन आदेश या ऑब्जेक्ट को बनाए रखने की आवश्यकता है और संग्रह में सूची के मुकाबले डुप्लिकेट हो सकता है तो सूची में जाने का एक तरीका है। दूसरी तरफ यदि आपकी आवश्यकता सेट के मुकाबले किसी भी डुप्लीकेट के बिना अद्वितीय संग्रह को बनाए रखना है तो रास्ता तय करना है।


जैसा कि हम जावा इंटरफेस के बारे में बात कर रहे हैं, क्यों जावाडोक को न देखें?

  • एक List एक आदेशित संग्रह (अनुक्रम) है, जो आमतौर पर डुप्लिकेट की अनुमति देता है
  • एक Set एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं है, कार्यान्वयन द्वारा पुनरावृत्ति आदेश की गारंटी दी जा सकती है

सेट्स से संबंधित आदेश की कमी के बारे में कोई उल्लेख नहीं है: यह कार्यान्वयन पर निर्भर करता है।


निम्नलिखित बिंदुओं के आधार पर अंतर

1) डुप्लिकेट: सूची डुप्लिकेट तत्वों की अनुमति देता है। किसी भी मौजूदा मूल्यों और उनके सूचकांक को प्रभावित किए बिना सूची में डुप्लिकेट तत्वों की संख्या को सम्मिलित किया जा सकता है। सेट डुप्लिकेट की अनुमति नहीं देता है। सेट करें और सेट क्लास लागू करने वाले सभी वर्गों में अद्वितीय तत्व होना चाहिए।

2) शून्य मान: सूची किसी भी संख्या के शून्य मानों की अनुमति देता है। सेट सबसे अधिक शून्य मूल्य की अनुमति देता है।

3) आदेश: सूची और इसके सभी कार्यान्वयन वर्ग सम्मिलन आदेश बनाए रखता है। सेट किसी भी आदेश को बनाए रखता है; अभी भी इसके कुछ वर्ग तत्वों को सॉर्ट करते हैं जैसे कि LinkedHashSet प्रविष्टि क्रम में तत्वों को बनाए रखता है।


यह वह उत्तर नहीं हो सकता है जिसे आप ढूंढ रहे हैं, लेकिन संग्रह कक्षाओं का जावाडॉक वास्तव में बहुत वर्णनात्मक है। कॉपी / पेस्ट किया:

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

सेट के विपरीत, सूचियां आम तौर पर डुप्लिकेट तत्वों को अनुमति देती हैं। अधिक औपचारिक रूप से, सूचियां आमतौर पर तत्वों ई 1 और ई 2 जैसे जोड़े को e1.equals (e2) की अनुमति देती हैं, और वे आम तौर पर कई शून्य तत्वों को अनुमति देते हैं यदि वे शून्य तत्वों को बिल्कुल अनुमति देते हैं। यह अकल्पनीय नहीं है कि जब कोई उपयोगकर्ता उन्हें सम्मिलित करने का प्रयास करता है तो रनटाइम अपवादों को फेंक कर, डुप्लिकेट को प्रतिबंधित करने वाली सूची को लागू करने की इच्छा हो सकती है, लेकिन हम उम्मीद करते हैं कि यह उपयोग दुर्लभ हो।


विषय का नाम: सूची वीएस सेट

मैं अभी संग्रह के फ्रेमवर्क नामक जावा के सबसे महत्वपूर्ण विषय से गुजर चुका हूं। मैंने आपके साथ संग्रह के बारे में अपने छोटे ज्ञान को साझा करने का विचार किया। सूची, सेट, मानचित्र इसके सबसे महत्वपूर्ण विषय हैं। तो आइए सूची और सेट से शुरू करें।

सूची और सेट के बीच अंतर:

  1. सूची एक संग्रह वर्ग है जो सारसूची वर्ग को विस्तारित करता है जहां सेट एक संग्रह वर्ग है जो सारणी कक्षा को बढ़ाता है लेकिन दोनों संग्रह इंटरफ़ेस लागू करता है।

  2. सूची इंटरफ़ेस डुप्लिकेट मान (तत्व) की अनुमति देता है जबकि सेट इंटरफ़ेस डुप्लिकेट मानों की अनुमति नहीं देता है। सेट में डुप्लिकेट तत्वों के मामले में, यह पुराने मानों को प्रतिस्थापित करता है।

  3. सूची इंटरफ़ेस NULL मानों को अनुमति देता है जहां सेट इंटरफ़ेस शून्य मानों की अनुमति नहीं देता है। सेट में शून्य मानों का उपयोग करने के मामले में यह NullPointerException देता है।

  4. सूची इंटरफ़ेस प्रविष्टि आदेश बनाए रखता है। इसका अर्थ यह है कि जिस तरह से हम सूची में तत्व जोड़ते हैं उसी तरह हम इसे इटरेटर या प्रत्येक शैली के लिए प्राप्त करते हैं। जबकि Set कार्यान्वयन अनिवार्य रूप से सम्मिलन आदेश बनाए रखने के लिए नहीं है। (हालांकि SortedSet का उपयोग करता है, और LinkedHashSet सम्मिलन आदेश रखता है)।

  5. सूची इंटरफ़ेस की अपनी विधियों को परिभाषित किया गया है जबकि सेट इंटरफ़ेस में अपनी विधि नहीं है इसलिए सेट केवल संग्रह इंटरफ़ेस विधियों का उपयोग करता है।

  6. सूची इंटरफ़ेस में Vector नामक एक विरासत वर्ग है जबकि सेट इंटरफ़ेस में कोई विरासत वर्ग नहीं है

  7. अंतिम लेकिन कम से कम नहीं ... सूची इटरेटर () विधि का उपयोग केवल सूची वर्गों के तत्वों के माध्यम से चक्र के लिए किया जा सकता है, जबकि हम सेट क्लास तत्वों तक पहुंचने के लिए iterator () विधि का उपयोग कर सकते हैं

हम और कुछ और जोड़ सकते हैं? कृपया मुझे बताओ।

धन्यवाद।


सभी List वर्ग सम्मिलन के आदेश को बनाए रखते हैं। वे प्रदर्शन और अन्य विशेषताओं के आधार पर विभिन्न कार्यान्वयन का उपयोग करते हैं (उदाहरण के लिए एक विशिष्ट इंडेक्स तक पहुंच की गति के लिए LinkedList , ऑर्डर को बनाए रखने के लिए LinkedList )। चूंकि कोई कुंजी नहीं है, डुप्लिकेट की अनुमति है।

Set कक्षाएं सम्मिलन आदेश को बनाए नहीं रखती हैं। वे वैकल्पिक रूप से एक विशिष्ट क्रम ( SortedSet साथ) लगा सकते हैं, लेकिन आमतौर पर कुछ हैश फ़ंक्शन ( SortedSet साथ) के आधार पर कार्यान्वयन-परिभाषित आदेश होता है। चूंकि Set एस को कुंजी द्वारा एक्सेस किया जाता है, इसलिए डुप्लिकेट की अनुमति नहीं है।


हाय तो बहुत से जवाब पहले से ही दिए गए हैं .. मुझे कुछ बिंदुओं को इंगित करने दें जिन्हें अभी तक उल्लेख नहीं किया गया है:

  • अधिकांश सूची कार्यान्वयन (ArrayList, वेक्टर) RandomAccess इंटरफ़ेस को कार्यान्वित करता है जो तेजी से पहुंच के लिए मार्कर इंटरफ़ेस है। सूची कार्यान्वयन में से कोई भी ऐसा नहीं करता है।
  • सूची ListIterator नामक एक विशेष इटरेटर का उपयोग ListIterator जो दोनों दिशाओं में पुनरावृत्ति का समर्थन करती है । सेट इटरेटर का उपयोग करता है जो केवल 1 तरीके पुनरावृत्ति का समर्थन करता है
  • हैशसेट को तत्वों की संख्या को संग्रहित करने के लिए ArrayList की तुलना में 5.5 गुना अधिक स्मृति लेता है।

List तत्वों का क्रमबद्ध अनुक्रम है जबकि Set तत्वों की एक अलग सूची है जो अनियंत्रित है (धन्यवाद, क्विन टेलर )।

List<E>:

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

Set<E>:

एक संग्रह जिसमें कोई डुप्लिकेट तत्व नहीं है। अधिक औपचारिक रूप से, सेटों में ई 1 और ई 2 तत्वों की कोई जोड़ी नहीं होती है, जैसे e1.equals (e2), और अधिकतर शून्य तत्व पर। जैसा कि इसके नाम से निहित है, यह इंटरफ़ेस गणितीय सेट अबास्ट्रक्शन मॉडल करता है।


कपट

सेट डुप्लिकेट की अनुमति नहीं देता है। सेट करें और सेट क्लास लागू करने वाले सभी वर्गों में अद्वितीय तत्व होना चाहिए। सूची डुप्लिकेट तत्वों की अनुमति देता है। किसी भी मौजूदा मूल्यों और उनके सूचकांक को प्रभावित किए बिना सूची में डुप्लिकेट तत्वों की संख्या को सम्मिलित किया जा सकता है।

शून्य मान

List allows any number of null values.
Set allows single null value at most

क्रम

सूची और इसके सभी कार्यान्वयन वर्ग सम्मिलन आदेश बनाए रखता है। सेट किसी भी क्रम को बनाए रखता नहीं है, इसके कुछ वर्ग अभी भी तत्वों को सॉर्ट करते हैं जैसे कि LinkedHashSet प्रविष्टि क्रम में तत्वों को बनाए रखता है और ट्रीसेट (तत्व डिफ़ॉल्ट रूप से आरोही क्रम बनाए रखते हैं)

कक्षा कार्यान्वयन

List: ArrayList, LinkedList 
Set: HashSet, LinkedHashSet, TreeSet 

सूची बनाम सेट करें

1) सेट डुप्लिकेट की अनुमति नहीं देता है। सूची डुप्लिकेट की अनुमति देता है। सेट के कार्यान्वयन के आधार पर, यह सम्मिलन आदेश भी बनाए रखता है।

उदाहरण: LinkedHashSet । यह सम्मिलन आदेश को बनाए रखता है। कृपया यहां क्लिक करें

2) विधि शामिल है। सेट की प्रकृति से यह पहुंच के लिए बेहतर प्रदर्शन प्रदान करेगा। सबसे अच्छा मामला ओ (1)। लेकिन सूची में contains होने के लिए प्रदर्शन समस्या है।


सूची

  1. तत्वों का एक आदेश समूह है।
  2. डुप्लीकेट वाले तत्वों के संग्रह के लिए सूची का उपयोग किया जाता है।
  3. सूची इंटरफेस के अंदर नई विधियों को परिभाषित किया गया है।

सेट

  1. तत्वों का एक अनियमित समूह है।
  2. सेट डुप्लीकेट के बिना तत्वों के संग्रह के लिए प्रयोग किया जाता है।
  3. सेट इंटरफ़ेस के अंदर कोई नई विधि परिभाषित नहीं की गई है, इसलिए हमें केवल सेट सबक्लास के साथ संग्रह इंटरफ़ेस विधियों का उपयोग करना होगा।

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

सूची: एक सूची में डुप्लिकेट तत्व हो सकते हैं, प्राकृतिक आदेश के साथ इसे डाला जाता है। इस प्रकार, इसे इंडेक्स या इटरेटर के आधार पर डेटा पुनर्प्राप्त किया जा सकता है। यह संग्रह को संग्रहीत करने के लिए व्यापक रूप से उपयोग किया जाता है जिसे इंडेक्स के आधार पर एक्सेस करने की आवश्यकता होती है।


╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝

  • एक सूची वस्तुओं का आदेश दिया गया समूह है
  • एक सेट आइटम की एक अनियमित समूह है जिसमें कोई डुप्लीकेट नहीं है (आमतौर पर)

संकल्पनात्मक रूप से हम आमतौर पर एक अनियमित समूह को संदर्भित करते हैं जो डुप्लिकेट को बैग के रूप में अनुमति देता है और डुप्लिकेट को सेट सेट करने की अनुमति नहीं देता है।





set