2012-05-23 11 views
79

से आइटम निकालें मेरे पास ArrayList मान लीजिए list, और इसमें 8 आइटम ए-एच हैं और अब मैं list से int सरणी में संग्रहीत 1,3,5 स्थिति आइटम को हटाना चाहता हूं, मैं यह कैसे कर सकता हूं।ArrayList

मैं

ArrayList<String> list = new ArrayList<String>(); 
list.add("A"); 
list.add("B"); 
list.add("C"); 
list.add("D"); 
list.add("E"); 
list.add("F"); 
list.add("G"); 
list.add("H"); 

int i[] = {1,3,5}; 

for (int j = 0; j < i.length; j++) { 
    list.remove(i[j]); 
} 

के साथ ऐसा करने की कोशिश कर रहा हूँ लेकिन उसके बाद पहला आइटम सरणी के तैनात हटाए बदल गया है और अगले पुनरावृति में यह गलत तत्व को हटा देता है या अपवाद दे।

+1

आपका तर्क त्रुटिपूर्ण है। निश्चित रूप से आपको प्रत्येक आइटम की स्थिति के बारे में नहीं सोचना चाहिए बल्कि वस्तुओं के बारे में सोचना चाहिए। दूसरे शब्दों में, आप पद 1, 3 और 5 को हटाना नहीं चाहते हैं, बल्कि इसके बजाय आप 'बराबर ("बी") ',' बराबर ("डी' का उपयोग करके आइटम को हटाएं (जहां भी वे 'सूची' में हैं) ")' और 'बराबर (" एफ ")'। इसके बारे में सोचो। – Squonk

+0

हां मैं आइटम को हटाना चाहता हूं लेकिन मैं आइटम कैसे मेल कर सकता हूं। असल में यह आइटम सूची दृश्य में हैं और चयन पर मैं इसे डीबी और ऐरे से हटाना चाहता हूं और एडाप्टर रीफ्रेश करना चाहता हूं और सूची –

+0

इंडेक्स के अवरोही क्रम में इसे हटाने के बारे में कैसे (इंडेक्स को सॉर्ट करें, फिर सबसे पहले इंडेक्स के साथ तत्व को हटा दें)? – nhahtdh

उत्तर

107

इस विशिष्ट मामले में, आपको तत्वों को अवरोही क्रम में हटा देना चाहिए। प्रथम सूचकांक 5, फिर 3, फिर 1। इससे अवांछनीय साइड इफेक्ट्स के बिना सूची में तत्वों को हटा दिया जाएगा।

for (int j = i.length-1; j >= 0; j--) { 
    list.remove(i[j]); 
} 
+0

यह अवधारणा गलत है जब आपका ऐरेलिस्ट पूर्णांक का है। –

+1

ओपी के ऐरेलिस्ट में 'स्ट्रिंग' है, न कि 'इंटेगर' (फिर भी, मैं आपके अवलोकन से सहमत हूं)। –

+0

@Alex: यह उत्तर काम करेगा लेकिन यह उनके प्रश्न में ओपी के तर्क के रूप में दोषपूर्ण है। हम 'ArrayList 'के बारे में बात कर रहे हैं - क्यों कोई भी उस स्थिति पर परीक्षण करने के बजाय पूरी तरह से' ArrayList' 'से किसी ऑब्जेक्ट को हटाना चाहेगा? ओपी 'स्ट्रिंग'' का उपयोग 'ऐरेलिस्ट' के ऑब्जेक्ट प्रकार के रूप में कर सकता है लेकिन आपका उत्तर जेनेरिक के लिए वास्तव में खराब कोडिंग अभ्यास है, भले ही यह ओपी की विशेष स्थिति को हल करता हो। – Squonk

4
String[] mString = new String[] {"B", "D", "F"}; 

for (int j = 0; j < mString.length-1; j++) { 
     List_Of_Array.remove(mString[j]); 
} 
2

कैसे इस बारे में? बस इसे एक सोचा,

import java.util.ArrayList; 

class Solution 
{ 
     public static void main (String[] args){ 

      ArrayList<String> List_Of_Array = new ArrayList<String>(); 
      List_Of_Array.add("A"); 
      List_Of_Array.add("B"); 
      List_Of_Array.add("C"); 
      List_Of_Array.add("D"); 
      List_Of_Array.add("E"); 
      List_Of_Array.add("F"); 
      List_Of_Array.add("G"); 
      List_Of_Array.add("H"); 

      int i[] = {1,3,5}; 

      for (int j = 0; j < i.length; j++) { 
       List_Of_Array.remove(i[j]-j); 
      } 

      System.out.println(List_Of_Array); 

     } 


} 

और उत्पादन था-

[A, C, E, G, H] 
27

आप ListIterator का उपयोग कर ArrayList से तत्वों को हटा सकते हैं,

ListIterator listIterator = List_Of_Array.listIterator(); 

/* Use void remove() method of ListIterator to remove an element from List. 
    It removes the last element returned by next or previous methods. 
*/ 
listIterator.next(); 

//remove element returned by last next method 
listIterator.remove();//remove element at 1st position 
listIterator.next(); 
listIterator.next(); 
listIterator.remove();//remove element at 3rd position 
listIterator.next(); 
listIterator.next(); 
listIterator.remove();//remove element at 5th position 
2

इसे इस तरह का प्रयास करें, देना

ArrayList<String> List_Of_Array = new ArrayList<String>(); 
List_Of_Array.add("A"); 
List_Of_Array.add("B"); 
List_Of_Array.add("C"); 
List_Of_Array.add("D"); 
List_Of_Array.add("E"); 
List_Of_Array.add("F"); 
List_Of_Array.add("G"); 
List_Of_Array.add("H"); 

int i[] = {5,3,1}; 

for (int j = 0; j < i.length; j++) { 
    List_Of_Array.remove(i[j]); 
} 
10
public void DeleteUserIMP(UserIMP useriamp) { 
     synchronized (ListUserIMP) { 
      if (ListUserIMP.isEmpty()) { 
      System.out.println("user is empty"); 
     } else { 
      Iterator<UserIMP> it = ListUserIMP.iterator(); 
      while (it.hasNext()) { 
       UserIMP user = it.next(); 
       if (useriamp.getMoblieNumber().equals(user.getMoblieNumber())) { 
        it.remove(); 
        System.out.println("remove it"); 
       } 
      } 
      // ListUserIMP.remove(useriamp); 

      System.out.println(" this user removed"); 
     } 
     Constants.RESULT_FOR_REGISTRATION = Constants.MESSAGE_OK; 
     // System.out.println("This user Deleted " + Constants.MESSAGE_OK); 

    } 
} 
1

यदि आप "=" का उपयोग करते हैं, तो दूसरी सूची में मूल सरणीसूची के लिए एक प्रतिकृति बनाई गई है, लेकिन संदर्भ समान है, इसलिए यदि आप एक सूची में बदलते हैं, तो दूसरा भी संशोधित होगा। जैसा कि पहले

iterator.remove() 

उल्लेख के बजाय "="

 List_Of_Array1.addAll(List_Of_Array); 
5

इसका प्रयोग करें शायद पाश दौरान सूची आइटम हटाने के लिए केवल सुरक्षित तरीका है।

इटरेटर का उपयोग कर आइटम को हटाने की गहरी समझ के लिए, यह thread

+0

मैं किसी भी वोट को डेज नहीं कर रहा हूं, मैं पूरी तरह से आपसे सहमत हूं। ऐसा करने का यह सबसे सुरक्षित तरीका है। – Simmant

2

निकालें (पूर्णांक सूचकांक) को देखने के लिए ArrayList की विधि सूची में निर्दिष्ट स्थान (इंडेक्स) में तत्व को हटा प्रयास करें। सरणी सूची को हटाने के बाद बाएं को किसी भी बाद के तत्वों को स्थानांतरित कर देता है।

मतलब एक ArrayList शामिल करता है, तो {20,15,30,40}

मैं विधि कहा जाता है: arraylist.remove (1)

तो डेटा 15 को हटा दिया जाएगा और 30 & 40 इन दो आइटम 1

द्वारा स्थानांतरित किया जाएगा इस कारण से आपको पहले सरणी सूची के उच्च अनुक्रमणिका आइटम को हटाना होगा।

तो .. आपकी दी गई स्थिति के लिए .. कोड होगा ..

ArrayList<String> list = new ArrayList<String>(); 
list.add("A"); 
list.add("B"); 
list.add("C"); 
list.add("D"); 
list.add("E"); 
list.add("F"); 
list.add("G"); 
list.add("H"); 

int i[] = {1,3,5}; 

for (int j = i.length-1; j >= 0; j--) { 
    list.remove(i[j]); 
} 
2

मुझे लगता है सरणी मैं हल कर चढ़ना है, यहाँ इटरेटर के साथ एक और उपाय है, यह अधिक सामान्य है:

ArrayList<String> list = new ArrayList<String>(); 
list.add("A"); 
list.add("B"); 
list.add("C"); 
list.add("D"); 
list.add("E"); 
list.add("F"); 
list.add("G"); 
list.add("H"); 

int i[] = {1,3,5}; 

Iterator<String> itr = list.iterator(); 
int pos = 0; 
int index = 0; 
while(itr.hasNext()){ 
    itr.next(); 
    if(pos >= i.length){ 
     break; 
    } 
    if(i[pos] == index){ 
     itr.remove(); 
     pos++; 
    } 

    index++; 
}