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


416

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



5
और यदि आप प्रदर्शन के संदर्भ में पता लगाना चाहते हैं, तो इस प्रश्न पर एक नज़र डालें। stackoverflow.com/questions/10799417/…
vsingh

जवाबों:


504

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

List<E>:

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

Set<E>:

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


7
एक SortedSet के लिए, कोई दो तत्व नहीं हैं जहाँ तुलना () == 0, जैसा कि बराबर नहीं कहा जाता है।
पीटर लॉरी

34
सेट सेट का आदेश दिया जा सकता है, इसलिए इस उत्तर का पहला बयान भ्रामक है, भले ही एक सूची संग्रह आदेश को लागू करने के लिए चुना जाना चाहिए
सैमुअल EUSTachi

24
गलत! कार्यान्वयन के आधार पर एक जावा सेट का आदेश दिया जा सकता है; उदाहरण के लिए, एक जावा ट्रीसेट का आदेश दिया गया है। जावा के संदर्भ में, एक सूची और सेट के बीच एकमात्र अंतर यह है कि सेट में अद्वितीय आइटम होते हैं। गणित के संदर्भ में, एक सेट की वस्तुएं अद्वितीय और अव्यवस्थित हैं।
stackoverflowuser2010

44
हां, एक जावा सेट कैन BUT हो सकता है जो कि NECESSARILY का आदेश न हो। हां, यदि आपके पास ट्रीसेट है, तो आप उस आदेश के आधार पर भरोसा कर सकते हैं। लेकिन आपको पता है कि आपके पास ट्रीसेट है और न सिर्फ एक सेट है। यदि आपको एक सेट लौटाया जाता है, तो आप उस पर निर्भर नहीं रह सकते हैं। दूसरी ओर एक सूची को उसके स्वभाव द्वारा आदेशित किया जाता है और सूची के किसी भी कार्यान्वयन का आदेश दिया जाना चाहिए। इसलिए, इंटरफ़ेस परिभाषा की शर्तों पर, यह कहना विशेष रूप से गलत नहीं है कि एक सेट अनियंत्रित है, लेकिन यह कहना थोड़ा अधिक तकनीकी रूप से सही है कि एक सेट तत्व आदेश की कोई गारंटी नहीं देता है।
Spanky Quigman

14
"क्रमबद्ध" के साथ "आदेश" मत देना। इसी तरह, एक इंटरफेस के अनुबंध और इंटरफ़ेस के कार्यान्वयन को भ्रमित न करें। यह कहना भी गलत है कि जो कुछ "अनियंत्रित" है, उसके पास कोई आदेश नहीं है, इसका सीधा सा मतलब है कि आदेश के कार्यान्वयन के बारे में कोई गारंटी नहीं है (और यह कि आदेश कॉल के बीच स्थिर नहीं हो सकता है, एक सूचीबद्ध सूची के विपरीत)।
lilbyrdie

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

2
एक बात ध्यान दें: स्थितीय उपयोग प्रदर्शन अंतर्निहित कार्यान्वयन, सरणी बनाम लिंक की गई सूची stackoverflow.com/questions/322715/…
Christophe Roussy

1
यदि स्थितिजन्य पहुँच द्वारा सेट नहीं किए जाते हैं तो कैसे अनुक्रमित किए जाते हैं? (ASCII-table के लिए +1)
tplive

72

एलिमेंट के एलिमेंट (यूनिक या नॉट ) कन्सट्रक्स्ड लिस्ट
को जावा के इंटरफेस नाम दिया गया हैList
इंडेक्स द्वारा एक्सेस किया जा सकता है

का उपयोग करते हुए नकल की

  • लिंक्ड सूची
  • सारणी सूची

अद्वितीय तत्वों की सूची:
जावा के इंटरफ़ेस के अनुरूप जिसका नामSet
कैन नहीं है सूचकांक द्वारा पहुँचा जा

का उपयोग करते हुए नकल की

  • हैशसेट (अव्यवस्थित)
  • लिंक्डहाशसेट (आदेशित)
  • ट्रीसेट (प्राकृतिक क्रम द्वारा या तुलनित्र द्वारा क्रमबद्ध)

जावा के इंटरफेस नाम के इंटरफेस Setऔर Listअनुरूप दोनोंCollection


28

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


16
  • एक सूची वस्तुओं का एक समूहबद्ध क्रम है
  • एक सेट बिना डुप्लिकेट (आमतौर पर) की अनुमति के साथ वस्तुओं का एक अनियंत्रित समूहन है

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


एक सेट में डुप्लिकेट नहीं हो सकते।
करीम k३

कुछ सेट कार्यान्वयन का आदेश दिया जाता है (जैसे लिंक्डहाशसेट, जो पर्दे के पीछे एक लिंक्डलिस्ट रखता है)। लेकिन सेट ADT के पास ऑर्डरिंग नहीं है।
माइकल मायर्स

10

सूची

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

सेट

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

10

सूची:

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

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

सेट:

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

कार्यान्वयन वर्गों में शामिल हैं: HashSet(अव्यवस्थित), LinkedHashSet(आदेशित), TreeSet(प्राकृतिक क्रम द्वारा या तुलनित्र द्वारा प्रदान किया गया)


7

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

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

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


2
सही बात। LinkedHashSet में सम्मिलन क्रम में तत्व शामिल हैं।
ggb667 15

यह एक इंटरफ़ेस है, सब कुछ कार्यान्वयन पर निर्भर करता है। List.get () पीआई के पहले 5 डेसीमल वाली फाइल बना सकता है और कुछ कार्यान्वयन में एक StackOverFlowException को फेंक सकता है, इसका मतलब यह नहीं है कि आप कह सकते हैं "एक सूची कुछ ऐसी है जो फाइलें बना सकती है", क्योंकि वह इसका हिस्सा नहीं है इंटरफ़ेस द्वारा परिभाषित अनुबंध। डॉक्स का दावा सेट एक सेट के गणितीय अवधारणा के बाद तैयार किया गया है, जो परिभाषा द्वारा संयुक्त राष्ट्र के आदेश है। अपने कोड में एक सेट को देखते हुए आप यह नहीं मान सकते कि यह बिना ठोस सिद्धांतों का उल्लंघन किए आदेश दिया गया है।
सारा

@kai, मैं आमतौर LinkedHashSetपर बाईं ओर रखता हूं यदि कोड बाद में आदेश पर निर्भर करता है। मैं केवल इसका उपयोग करता Setहूं अगर मैं वास्तव में इसे एक की तरह उपयोग करता हूं, जैसा कि आप यह नहीं मान सकते हैं कि अंतर्निहित कार्यान्वयन एक है LinkedHashSetया ऐसा है, यह आज हो सकता है, लेकिन कल कोड बदलता है और यह विफल हो जाएगा।
क्रिस्टोफ रूसो

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

5

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

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

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


5

एक सेट अलग-अलग वस्तुओं का एक अनियंत्रित समूह है - कोई डुप्लिकेट ऑब्जेक्ट की अनुमति नहीं है। यह आम तौर पर सम्मिलित की जा रही वस्तुओं के हैश कोड का उपयोग करके लागू किया जाता है। (विशिष्ट कार्यान्वयन आदेश जोड़ सकते हैं, लेकिन सेट इंटरफ़ेस स्वयं नहीं करता है।)

एक सूची वस्तुओं का एक आदेशित समूह है जिसमें डुप्लिकेट हो सकते हैं। यह एक साथ लागू किया जा सकता है ArrayList, LinkedListआदि


1
मैं उलझन में हूँ 😕! इस संदर्भ में क्या आदेश / अनियोजित साधन है? क्या यह आरोही क्रम और अवरोही क्रम से संबंधित है? यदि हां, तो Listso
malhobayyeb

4
आदेश दिया जब इनपुट डेटा बिल्कुल के रूप में व्यवस्थित कर रहे हैं उपयोगकर्ता द्वारा inputted जबकि है छाँटे गए जब इनपुट डेटा कोषगत या आरोही / अवरोही क्रम क्रमबद्ध किया जाता है (पूर्णांक मूल्यों के संदर्भ में) है। अनियंत्रित का अर्थ है कि इनपुट डेटा उपयोगकर्ता के इनपुट किए गए क्रम में संग्रहीत किया जा सकता है या नहीं।
अखिल

5

सूची:
सूची नकली तत्वों और अशक्त मूल्यों की अनुमति देता है। तत्वों के संबंधित सूचकांक का उपयोग करके खोज करना आसान है और यह सम्मिलन क्रम में तत्वों को भी प्रदर्शित करेगा। उदाहरण: (linkedlist)

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

आउटपुट:

1
1
555
333
888
555
अशक्त
शून्य
मान: 1
मूल्य: 555
मूल्य: 333
मूल्य: 888
मूल्य: 555
मूल्य: अशक्त
मूल्य: अशक्त

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

उदाहरण: (TreeSet)

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    try {
        set.add("hello");
        set.add("world");
        set.add("welcome");
        set.add("all");

        for (String num : set) {
            System.out.println( num);

        }
        set.add(null);
    } catch (NullPointerException e) {
        System.out.println(e);
        System.out.println("Set doesn't allow null value and duplicate value");
    }

 }

}

आउटपुट:

सभी
हैलो
वेलकम
वर्ल्ड
java.lang.NullPointerException
सेट शून्य मान और डुप्लिकेट मान की अनुमति नहीं देता है


3

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

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


3

सूची बनाम सेट

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

उदाहरण के लिए: LinkedHashSet। यह प्रविष्टि क्रम को बनाए रखता है। कृपया देखें कृपया यहाँ क्लिक करें

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


2

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

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


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

1

आदेश देना ... एक सूची में एक आदेश है, एक सेट नहीं है।


2
सेट ADT आदेश को निर्दिष्ट नहीं करता है, लेकिन कुछ सेट कार्यान्वयन (जैसे LinkedHashSet) सम्मिलन क्रम रखते हैं।
माइकल मायर्स

3
हालाँकि, अधिक महत्वपूर्ण अंतर यह है कि सेट डुप्लिकेट की अनुमति नहीं देते हैं। एक बैग / मल्टीसेट करता है।
क्विन टेलर

एक ट्रीसेट के पास ऑर्डरिंग है।
stackoverflowuser2010

1

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

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

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

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

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


हाय @Vibha, अगर मैं दोनों हालत wan? मेरा मतलब है कि मैं नहीं चाहता कि मेरे डेटा में डुप्लिकेट हों, और मैं यह भी चाहता हूं कि यह ऑर्डर हो।
पनडोल चोंग

1

सूची:

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

सेट:

  1. नकल की अनुमति नहीं है।
  2. तत्वों को समूहीकृत करने में अक्षम। (दूसरे शब्दों में कोई निश्चित क्रम नहीं। यह आरोही क्रम में व्यवस्थित हो सकता है या नहीं भी हो सकता है)

0

Set<E>और List<E>दोनों प्रकार के तत्वों को संग्रहीत करने के लिए उपयोग किया जाता है E। अंतर यह है कि Setअनियंत्रित तरीके से संग्रहीत किया जाता है और डुप्लिकेट मानों की अनुमति नहीं देता है। Listतत्वों को संग्रहीत तरीके से संग्रहीत करने के लिए उपयोग किया जाता है और यह डुप्लिकेट मानों की अनुमति देता है।

Setतत्वों को एक सूचकांक स्थिति तक नहीं पहुँचा जा सकता है, और Listतत्वों को एक सूचकांक स्थिति के साथ एक्सेस किया जा सकता है।


1
@BalusC कृपया पोस्ट की तारीख देखकर टिप्पणी न करें। उस समय योग्य पद देखें।
यश

0

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

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

@smurti यह थोड़ा देर से है, और यह सुनिश्चित नहीं है कि आपने नोट किया है, लेकिन आपका पहला बिंदु खुद ही विरोधाभास करता है: "अधिकांश सूची कार्यान्वयन (ArrayList, वेक्टर) randomAccess को लागू करते हैं ..." और "... सूची में से कोई भी नहीं कार्यान्वयन ऐसा करते हैं "
पीटर एम

0

सबसे बड़ी अलग मूल अवधारणा है।

से सेट और सूची इंटरफ़ेस। सेट गणित की अवधारणा है। सेट विधि संग्रह का विस्तार करती है। कभी भी नई विधि न जोड़ें। आकार () का अर्थ है कार्डिनैलिटी (अधिक है BitSet.cardinality, रैखिक काउंटर , लॉग लॉग og हाइपरलॉगलाइन )। addAll () का अर्थ है संघ। अनुरक्षण () का अर्थ है प्रतिच्छेदन। removeAll () का अर्थ है अंतर।

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

तो आवश्यक अंतर अवधारणा है। सेट गणित सेट अवधारणा है। सूची अनुक्रम अवधारणा है।


-1

यहाँ ग्रूवी के साथ एक स्पष्ट उदाहरण है। मैं एक सेट और एक सूची बनाता हूं। फिर मैं प्रत्येक सूची के भीतर 20 बेतरतीब ढंग से उत्पन्न मूल्य को संग्रहीत करने का प्रयास करता हूं। उत्पन्न मान 0 से 5 के बीच हो सकता है

s = [] as Set
l = []

max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}


println "\n"
println "Set : $s "
println "list : $l

परिणाम :

यादृच्छिक संख्या: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

सेट : [4, 1, 0, 2, 3]

सूची : [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

आप देख सकते हैं कि अंतर यह है कि:

  • सेट डुप्लिकेट मानों की अनुमति नहीं देता है।
  • सूची डुप्लिकेट मानों की अनुमति दें।

1
सूचियाँ भी क्रम बनाए रखती हैं।
glen3b

-1

उत्तर की तरह जैसे SET में डुप्लिकेट वैल्यू और लिस्ट नहीं है। बेशक, आदेश उन्हें अलग करने के लिए एक और चीज है।


-1

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

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


-2

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

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

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

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

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

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

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

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

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

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

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

धन्यवाद।


एक के लिए, Listऔर एक Setइंटरफेस है जो एक सार वर्ग के रूप में "आधार" कार्यान्वयन है (जिसका आपने उल्लेख किया है)। इसके अलावा, # 3 पूरी तरह से गलत है , क्योंकि अधिकांश सेट शून्य मान (लेकिन कार्यान्वयन निर्भर) की अनुमति देते हैं। मुझे # 5 और # 7 समझ में नहीं आता है, और # 6 के Vectorलिए विरासत नहीं है, लेकिन सिर्फ सिंक्रनाइज़ किया जाता है और उपयोग के लिए पसंद नहीं किया जाता है जब सिंक्रनाइज़ेशन की आवश्यकता होती है।
glen3b

-3

सेट:

डुप्लिकेट मान नहीं हो सकते हैं ऑर्डर करना कार्यान्वयन पर निर्भर करता है। डिफ़ॉल्ट रूप से यह आदेश नहीं दिया जाता है कि अनुक्रमणिका तक पहुंच नहीं है

सूची:

डुप्लिकेट मान हो सकते हैं डिफ़ॉल्ट रूप से आदेशित अनुक्रमणिका द्वारा एक्सेस किया जा सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.