如何在Android(Java)中从通用arraylist中删除项

如何在Android(Java)中从通用arraylist中删除项,java,android,Java,Android,我这里有一个对象的通用arraylist,我想删除某些元素,问题是当我使用for循环迭代列表时,我不能执行简单的remove(),因为元素在每次删除后都会移动 谢谢使用删除元素 喜欢 Iterator itr = list.iterator(); String strElement = ""; while (itr.hasNext()) { strElement = (String) itr.next(); if (strElement.equals("2")) {

我这里有一个对象的通用arraylist,我想删除某些元素,问题是当我使用for循环迭代列表时,我不能执行简单的
remove()
,因为元素在每次删除后都会移动

谢谢

使用删除元素

喜欢

Iterator itr = list.iterator();
String strElement = "";
while (itr.hasNext()) {
    strElement = (String) itr.next();
    if (strElement.equals("2")) {
        itr.remove();
    }
}

如果您有要从
阵列列表中删除的对象,可以使用:

mArrayList.remove(object);
或者,您可以使用删除对象:

while(iterator.hasNext()){
    if(iterator.next() == some condition for removal){
        iterator.remove();
    }
}

创建要从原始ArrayList中删除的数据索引的单独ArrayList,然后通过使用for循环在其上循环来删除这些元素

ArrayList<Myobj> arr = new ArrayList<Myobj>();

for (Myobj o : arr){

  arr.remove(arr.indexOf(o));

 }
ArrayList arr=new ArrayList();
对于(Myobj o:arr){
arr.remove(arr.indexOf(o));
}
您可以在遍历ArrayList时向后迭代并删除。这样做的优点是后续元素不需要移动,并且比向前移动更容易编程

   List<String> arr = new ArrayList<String>();
   ListIterator<String> li = arr.listIterator(arr.size());

    // Iterate in reverse.
    while(li.hasPrevious()) {

        String str=li.previous();
        if(str.equals("A"))
        {
            li.remove();
        }
    }
List arr=new ArrayList();
ListIterator li=arr.ListIterator(arr.size());
//反向迭代。
while(li.hasPrevious()){
字符串str=li.previous();
如果(str.equals(“A”))
{
li.remove();
}
}

您可以这样迭代列表

public void clean(List<Kopek> kopeks) {
  for(Kopek kopek : kopeks) {
    if (kopek.isDirty())
      kopeks.remove(kopek);
  }
}
public void clean(列出Kopek){
用于(Kopek Kopek:kopeks){
if(kopek.isDirty())
移除(kopek);
}
}
这相当于

public void clean1(List<Kopek> kopeks) {
  Iterator<Kopek> kopekIter = kopeks.iterator();

  while (kopekIter.hasNext()) {
    Kopek kopek = kopekIter.next();
    if (kopek.isDirty())
      kopeks.remove(kopek);
  }
}
public void clean1(列出Kopek){
迭代器kopekIter=kopeks.Iterator();
while(kopekIter.hasNext()){
Kopek=kopekIter.next();
if(kopek.isDirty())
移除(kopek);
}
}
不要这样做。。。(由于您已经观察到的原因。)

public void clean(列出Kopek){

不使用迭代器的for(int i=0;i也解决了这个问题。我所要做的就是获取要删除的索引并按降序排序,然后将其从列表中删除。 检查下面的代码

Arraylist<obj> addlist = getlist();
List<Integer> indices = new ArrayList<Integer>();
    for(int i=0; i<addlist.size() ;i++){
        if(addlist.get(i).getDelete()){
            indices.add(i);

        }
    }
    Collections.sort(indices, Collections.reverseOrder());
    for (int i : indices)
        addlist.remove(i);
Arraylist addlist=getlist();
列表索引=新的ArrayList();

对于(int i=0;i您是否有要删除的特定值?是的,在对象中我有一个布尔值,我必须检查并删除该项更改您的链接以指向Android迭代器。在它指向以前的Java版本之前。如果需要,请随意还原。如果我必须删除列表将出现问题。删除第二个项目时将出现错误shift@Rakshi:如果您知道要删除哪些元素,可以不使用for循环。如果我的列表中有5个项目,我必须删除第2个和第5个项目,如果我先删除第2个项目,则列表中只有4个项目,如果我删除了,则会出现异常要使用迭代器删除5th,您可以始终处理按顺序排列的元素,而不是指定的索引。因此,您不应该为上述问题而烦恼。问题是,当我删除列表中的任何项时,将发生移位,并生成异常。问题是,当我删除列表中的任何项时,将出现异常shift并生成一个例外。实际上,您希望从ArrayList中删除的数据中获取数据,或者在删除数据后获取新形成的ArrayList的索引。我需要从列表中删除随机对象。例如,如果列表中有5个项目,我想删除第2个和第4个对象。您可以找到解决方案下面的n。感谢Intrest感谢您的努力..但是解决方案列表。删除(对象);甚至dosent帮助它创建相同的异常..最好使用迭代器或检查解决方案,而不使用下面的迭代器
public void clean(List<Kopek> kopeks) {
  int i=0;
  while(i<kopeks.size()) {
    Kopek kopek = kopeks.get(i);
    if (kopek.isDirty()) // no need to increment.
      kopeks.remove(i);
    else
      i++;
  }
}
Arraylist<obj> addlist = getlist();
List<Integer> indices = new ArrayList<Integer>();
    for(int i=0; i<addlist.size() ;i++){
        if(addlist.get(i).getDelete()){
            indices.add(i);

        }
    }
    Collections.sort(indices, Collections.reverseOrder());
    for (int i : indices)
        addlist.remove(i);