2010-10-22 12 views
6

मैं अपेक्षाकृत नया जावा प्रोग्रामर हूं और मैं एक ऐरेलिस्ट से एक से अधिक तत्वों को अलग-अलग हटा रहा हूं। आदर्श रूप में मैं इस तरह कुछ करने के लिए करना चाहते हैं:मैं जावा ऐरेलिस्ट से अनुक्रमिक तत्वों को कैसे हटा सकता हूं?

ArrayList ar1 = new ArrayList(); 
ar1.add(...) 
ar1.add(...) 
ar1.add(...) 
ar1.add(...) 

for (int i = 0; i < 2; i++){ 
    ar1.remove(i); 
} 

मुझे लगता है कि इटरेटर मदद कर सकता है, लेकिन मैं एक उदाहरण है कि मैं क्या कर रहा हूँ के करीब काफी मेल खाता नहीं मिल रहा। किसी भी सहायता की सराहना की जाएगी। धन्यवाद।

उत्तर

20

यहाँ है कि आप क्या करना चाहते हैं:

ar1.subList(0, 2).clear(); 

इस सूची के पहले 2 तत्वों का एक sublist दृश्य बनाता है और फिर, कि sublist को साफ करता है उन्हें मूल सूची से हटा दिए गये। subList विधि मुख्य रूप से इस तरह की चीज़ के लिए मौजूद है ...सूची की एक विशिष्ट श्रृंखला पर संचालन कर रहे हैं।

+0

+1 उत्कृष्ट उत्तर। – aioobe

+0

+1 एपीआई दस्तावेज़ों का सुझाव है कि आप क्या करते हैं। (आमतौर पर एकाधिक 'निकालें' कॉल के रूप में उतना कुशल नहीं हो सकता है।) –

+0

जब तक ओपी को हटाना नहीं है, तब तक अनुक्रमिक नहीं हैं। विवरण पर निर्भर करता है। –

2

यदि आपके पास निकालने के लिए ऑब्जेक्ट्स की एक अलग सूची है तो आप Collection.removeAll (toRemove) का उपयोग कर सकते हैं।

http://download.oracle.com/javase/6/docs/api/java/util/Collection.html

तो अपने संग्रह के आधार अनुक्रमणित है, जैसे ArrayList है, तो आप

remove(index) 

सूचकांक में तत्व को दूर करने के कॉल कर सकते हैं। आप इसे लूप में कर सकते हैं, लेकिन सावधान रहें कि सभी इंडेक्स को अन्य उत्तरों के रूप में हटा दें।

यदि सब आप सूची में से पहले दो तत्वों को दूर करना चाहते हैं, तो

list.remove(0); 
    list.remove(0); 

यह करना चाहिए।

+0

मेरी गलती मैं बहुत तेजी से पढ़ सकते हैं और सोचा था कि वह को रोकने के लिए कोशिश कर रहा था डुप्लिकेट आइटम हटाएं इस परिदृश्य में अभी भी मार डाला गया है – Woot4Moo

+0

लेकिन 'removeAll' ** कैलिली से तर्क में मौजूद तत्वों की ** सभी घटनाओं ** को हटा देगा, यानी, यह ArrayList के तत्वों को पहले हटाने के समान नहीं है । – aioobe

+0

@aioobe आप सही हैं। – hvgotcodes

5

आप निश्चित रूप से है कि

ArrayList ar1 = new ArrayList(); 
    ar1.add("a"); 
    ar1.add("b"); 
    ar1.add("c"); 
    ar1.add("d"); 

    for (int i = 0; i < 2; i++) { 
     ar1.remove(i); 
    } 
    System.out.println(ar1); 

केवल ध्यान देना है कि आप पहले तत्व निकाल के बाद, अन्य तत्वों बदलाव कर सकते हैं। इस प्रकार,

ar1.remove(0); 
ar1.remove(1); 

प्रभावी रूप से सूची से पहले और तीसरे तत्वों को हटा देगा। यह पहली दो तत्व है, हालांकि हट जाएँगे: एक सूची से

ar1.remove(0); 
ar1.remove(0); 
+0

यह किस तरह से सूची में संग्रहीत चीज के प्रकार पर निर्भर करता है? –

+0

@ स्टीफन मेरा बुरा, मैंने चीजों को भ्रमित कर दिया। –

3

अनुक्रमित इन्हें हटाने के लिए, आप पीछे की ओर गिनती करने के लिए की जरूरत है:

for (int i = 1; i >= 0; i--) 

अन्यथा, अपना पहला हटाने आइटम यह "ऊपर" में बदलाव संग्रह और आप उन वस्तुओं को हटाने के लिए हवा नहीं करते हैं जिन्हें आप सोचते हैं कि आप हटा रहे हैं।

1

आप इस कोशिश कर सकते:

List<Whatever> l = new ArrayList<Whatever>(); 
l.add(someStuff); 
Iterator<Whatever> it = l.iterator(); 
int i = 0; 
while (i < 2 && it.hasNext()) { 
    it.next(); 
    it.remove(); 
    i++; 
} 

या, अधिक आम तौर पर:

List<Whatever> l = new ArrayList<Whatever>(); 
l.add(someStuff); 
Iterator<Whatever> it = l.iterator(); 
while (it.hasNext()) { 
    Whatever next = it.next(); 
    if (shouldRemove(next)) { 
     it.remove(); 
    } 
} 

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

+1

आह, हां। धन्यवाद, एरिक। StackOverflow को वास्तव में उत्तर फलक में निर्मित एक कंपाइलर की आवश्यकता है ताकि हम अपने कोड का परीक्षण कर सकें :) –

2

आप आइटम आप निकालना चाहते हैं की अनुक्रमणिका जानते हैं, तो आप उन्हें उलटे क्रम में, हटा सकते हैं स्थानांतरण अनुक्रमित के बारे में चिंता किए बिना:

ArrayList ar1 = new ArrayList(); 
    ar1.add("a"); 
    ar1.add("b"); 
    ar1.add("c"); 
    ar1.add("d"); 

    int[] indexesToRemove = {0,2,3}; 
    Arrays.sort(indexesToRemove); 
    for (int i=indexesToRemove.length-1; i>=0; i--) { 
     ar1.remove(indexesToRemove[i]); 
    } 
संबंधित मुद्दे