सबसे पहले मैं लंबे उत्तर के लिए माफ़ी दे रहा हूं। यदि मैं किसी भी समय गलत हूं तो आपको हमेशा सही करने के लिए आपका स्वागत है। यहाँ मैं समाधान के हल के लिए कुछ विकल्प की तुलना कर रहा हूँ
विकल्प 1 < ArrayList>:
अपने कोड आप इस्तेमाल में ArrayList.removeAll
विधि removeAll
के स्रोत कोड के कोड के लिए देख सकते हैं removeAll
public boolean removeAll(Collection<?> c) {
return batchRemove(c, false);
}
इतना पता है कि batchRemove
विधि में है की जरूरत है। यहां यह link है। यहां महत्वपूर्ण हिस्सा आप
for (; r < size; r++)
if (c.contains(elementData[r]) == complement)
elementData[w++] = elementData[r];
देख सकते हैं अब contains
विधि है जो सिर्फ indexOf
विधि का एक आवरण है इस पर गौर कर सकते हैं। link। इंडेक्सऑफ विधि में ओ (एन) ऑपरेशन होता है।(ध्यान देने योग्य बात सिर्फ एक हिस्सा यहाँ)
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
सब कुछ खत्म हो
तो यह एक
O (n^2)
removeAll
विकल्प में परिचालन है 2 < हैशसेट>: पहले मैंने यहां कुछ लिखा था लेकिन ऐसा लगता है कि मैं कुछ पॉइंट में गलत था टी इसे हटाने के लिए। हैशसेट के बारे में विशेषज्ञ से बेहतर सुझाव लें। मुझे आपके मामले में यकीन नहीं है कि हैशप एक बेहतर समाधान होगा या नहीं। तो मैं एक और समाधान का प्रस्ताव कर रहा हूँ
विकल्प 3 < मेरे सुझाव आप कोशिश कर सकते हैं>:
चरण 1: यदि आपका डेटा तो और ने इस कदम की कोई जरूरत नहीं सूची है जो आप घटा देंगे सॉर्ट क्रमबद्ध हो जाता है (दूसरी सूची)
चरण 2: अवर्गीकृत सूची के प्रत्येक तत्व के लिए दूसरी सूची
चरण 3 में एक द्विआधारी खोज चलाने : अगर कोई मुकाबला नहीं फिर एक और परिणाम सूची में स्टोर कर पाया लेकिन अगर मैच पाया तो न जोड़ने
चरण 4: परिणाम सूची अपने अंतिम जवाब है
विकल्प 3 की लागत:
चरण 1: अगर हल नहीं O(nlogn)
समय
चरण 2:O(nlogn)
समय
चरण 3:O(n)
अंतरिक्ष
**
इसलिए समग्र ओ (nlogn) समय और हे (एन) अंतरिक्ष
**