2012-05-23 21 views
79

Ich habe eine ArrayList angenommen list, und es hat 8 Elemente A-H und jetzt möchte ich 1,35 Position Item in Int-Array von der list gespeichert, wie kann ich das tun.Artikel aus ArrayList entfernen

Ich versuche, diese

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]); 
} 

mit

zu tun, aber nach dem ersten Element des Arrays gelöscht positioniert ist, geändert und in der nächsten Iteration löscht es falsch Element oder eine Ausnahme geben.

+1

Ihre Logik ist fehlerhaft. Sicherlich solltest du nicht über die Position jedes Gegenstandes nachdenken, sondern stattdessen über die Gegenstände selbst nachdenken. Mit anderen Worten, Sie möchten nicht die Positionen 1, 3 und 5 entfernen, sondern stattdessen die Elemente (wo auch immer sie sich in der "Liste" befinden) mit 'equals (" B ")', 'equals (" D ")' und 'equals (" F ")'. Denk darüber nach. – Squonk

+0

Ja Ich möchte das Element löschen, aber wie kann ich Objekte vergleichen? Eigentlich sind diese Elemente in ListView und auf Select Ich möchte diese aus DB und Array löschen und Adapter und Liste aktualisieren –

+0

Wie entfernen Sie es in der absteigenden Reihenfolge der Indizes (sortieren Sie die Indizes, dann entfernen Sie das Element mit dem höchsten Index zuerst) – nhahtdh

Antwort

107

In diesem speziellen Fall sollten Sie die Elemente in absteigender Reihenfolge entfernen. Erster Index 5, dann 3, dann 1. Dadurch werden die Elemente ohne unerwünschte Nebenwirkungen aus der Liste entfernt.

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

Dieses Konzept ist falsch, wenn Ihre ArrayList eine Ganzzahl ist. –

+1

Die ArrayList des OP enthält 'Zeichenketten', nicht' Ganzzahlen' (trotzdem stimme ich Ihrer Beobachtung zu). –

+0

@Alex: Diese Antwort wird funktionieren, aber es ist so fehlerhaft wie die Logik des OP in ihrer Frage. Wir sprechen über 'ArrayList ' - warum sollte jemand ein Objekt von einer 'ArrayList' basierend auf der Position entfernen wollen, anstatt zu testen, was an dieser Position ist? Das OP könnte durchaus 'String' als Objekttyp für die' ArrayList' verwenden, aber Ihre Antwort ist eine wirklich schlechte Kodierungspraxis für Generika, auch wenn sie die besondere Situation des OPs löst. – 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

Wie wäre das? Probieren Sie es einfach ein Denk

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); 

     } 


} 

Und die Ausgabe war-

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

Sie Elemente aus ArrayListListIterator mit entfernen,

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

Versuchen Sie es auf diese Weise,

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

Wenn Sie "=" verwenden, wird eine Replik für die ursprüngliche Arraylist in der zweiten erstellt, aber die Referenz ist dieselbe. Wenn Sie also in einer Liste ändern, wird auch die andere modifiziert. Verwenden Sie diese anstelle von „=“

 List_Of_Array1.addAll(List_Of_Array); 
5

Wie bereits erwähnt

iterator.remove() 

ist vielleicht der einzig sichere Weg, Listenelemente während der Schleife zu entfernen.

Zum besseren Verständnis der Elemente Entfernens des Iterator verwenden, versuchen Sie an diesem thread

+0

Ich bin Daze keine Stimmen, ich stimme Ihnen völlig zu. Dies ist ein sicherer Weg, dies zu tun. – Simmant

2

remove (int index) -Methode von Arraylist zu suchen, das Element an der angegebenen Position (Index) in der Liste entfernt. Nach dem Entfernen von Arraylist-Elementen werden alle nachfolgenden Elemente nach links verschoben.

bedeutet, wenn eine Arraylist enthält {20,15,30,40}

ich die Methode genannt haben: arraylist.remove (1)

dann werden die Daten 15 und 30 & 40 diese gelöscht werden, zwei Elemente werden um 1 verschoben.

Aus diesem Grund müssen Sie zuerst den höheren Index arraylist löschen.

Also..für Ihre gegebene Situation..der Code wird ..

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

Ich gehe davon aus das Array i sortiert ist Ascend hier eine andere Lösung mit Iterator, es generisch ist:

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++; 
}