2012-01-28 10 views
5

मैं एक दूसरे के साथ दो लिंक्ड सूची में तत्वों की तुलना करने के लिए, एक प्रोग्राम निष्पादित करने का प्रयास कर रहा हूं। एक तरफ, मैं यह दो लूप के लिए निष्पादित करके और सूची दोनों में सूची 1 के साथ .equals() का उपयोग करके सूचियों दोनों पर तुलना करके कर सकता हूं। दूसरा तरीका है, बस पहली सूची में पुनरावृत्त करना और सूची 1.contains (list1.get (i)) .. जावा दस्तावेज कहता है, .contains आंतरिक रूप से असमान करता है। यदि ऐसा है, तो पूर्व की तुलना में पूर्व के लिए मेरा चलने का समय कैसा है? क्या मैंने प्रलेखन की गलत व्याख्या की? यदि मैंने किया, तो जब मैं उपयोग करता हूं तो आंतरिक तुलना वास्तव में कैसे होती है?जावा: .contains और .equals

  using equals: 
      for (int i = 0; i < list_one.size(); i++) { 
       for (int j = 0; j < list_one.size(); j++) { 
        if (list_one.get(i).equals(list_two.get(j))) { count++; } 

      using contains: 
      for (int i = 0; i < list_one.size(); i++) { 
       if (list_two.contains(list_one.get(i)) == true) { count++; } 
+2

स्रोत को देखने पर विचार करें। –

+0

लूप के लिए उपयोग करने की आवश्यकता नहीं है यह जांचने के लिए कि कोई तत्व मौजूद है या नहीं। – adatapost

+0

मुझे यह जांचना होगा कि पहली सूची में प्रत्येक तत्व, दूसरी सूची में सुंदर है या नहीं। मूल रूप से, ओवरलैपिंग तत्वों को उठाते हुए। – madCode

उत्तर

1

मुझे लगता है, get(i) कि आप दोनों छोरों में get(j) उपयोग कर रहे हैं देख रहे हैं। एक लिंक्ड सूची में जो अक्षम है। for (String s1 : list1) for (String s2 : list2) ... में contains जैसी ही गति होनी चाहिए।

उदाहरण के लिए (3) पहले तत्व से शुरू करने की आवश्यकता होगी, अगले तीन बार लिंक लें। जबकि प्रत्येक के लिए अगले तत्व पर इशारा करते हुए एक इटरेटर का उपयोग करता है।

5

contains का कार्यान्वयन equals एक बार फिर से चालू हो जाएगा, इसलिए यदि आप जिस तत्व को ढूंढ रहे हैं, वह सूची की शुरुआत में कहीं भी पूरी सूची को पुन: सक्रिय नहीं करता है। यदि आपका संस्करण ऐसा नहीं करता है, तो यह समझाएगा कि यह धीमा क्यों है।

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

+0

यह समझ में आता है। यदि आप मेरा कोड देखते हैं, हाँ .. मुझे लगता है कि यह एक कारण हो सकता है, यह चलने का समय क्यों लंबा है। और हाँ, मुझे पता है, कई अन्य तरीके हैं, लेकिन मैं विशेष रूप से इस परिदृश्य की कोशिश कर रहा था। – madCode

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