Java 迭代时从列表中删除项

Java 迭代时从列表中删除项,java,list,concurrency,iterator,Java,List,Concurrency,Iterator,在遍历列表时,可能会删除某个项 private void removeMethod(Object remObj){ Iterator<?> it = list.iterator(); while (it.hasNext()) { Object curObj= it.next(); if (curObj == remObj) { it.remove(); break; }

在遍历列表时,可能会删除某个项

private void removeMethod(Object remObj){
    Iterator<?> it = list.iterator();
    while (it.hasNext()) {
        Object curObj= it.next();
        if (curObj == remObj) {
            it.remove();
            break;
        }
    }
}
如何在遍历列表时从列表中删除未知对象

范例


我有一个侦听器对象列表。在通知听众某个事件时,可能不再需要其他听众。

如果我正确理解您的问题,以下可能是最有效的解决方案,但我认为值得一试:

在performChecks下使用forObject对象:list.toArray

优点:每次列表刷新到数组时,它都会反映更改。
因此,如果在单独的循环中将该项从列表中删除,则您的问题有点混乱,因此我将回答我认为我理解的问题;您的问题是:如何从列表中删除一个项目,同时列表被并行迭代,项目被删除,或者如何避免

首先,代码中的问题是使用迭代器而不是列表删除项。第二,如果您使用的是并发性,请使用并使用删除该项

list.remove

要为该场景提供一个很好的示例,请选中

所以这不好:

List<String> myList = new ArrayList<String>();

    myList.add("1");
    myList.add("2");
    myList.add("3");
    myList.add("4");
    myList.add("5");

    Iterator<String> it = myList.iterator();
    while(it.hasNext()){
        String value = it.next();
        System.out.println("List Value:"+value);
        if(value.equals("3")) myList.remove(value);
    }
这很好:

List<String> myList = new CopyOnWriteArrayList<String>();

    myList.add("1");
    myList.add("2");
    myList.add("3");
    myList.add("4");
    myList.add("5");

    Iterator<String> it = myList.iterator();
    while(it.hasNext()){
        String value = it.next();
        System.out.println("List Value:"+value);
        if(value.equals("3")){
            myList.remove("4");
            myList.add("6");
            myList.add("7");
        }
    }
    System.out.println("List Size:"+myList.size());

您是否尝试过使用增强的for循环和.remove方法??同步上课?我不清楚你的问题。有例子吗?removeMethod的增强for循环?这将抛出一个例子@BoratSagdiyev@Mr_Skid_Marks你能给我们举个例子吗,这样我们就可以生产你的产品了?
List<String> myList = new CopyOnWriteArrayList<String>();

    myList.add("1");
    myList.add("2");
    myList.add("3");
    myList.add("4");
    myList.add("5");

    Iterator<String> it = myList.iterator();
    while(it.hasNext()){
        String value = it.next();
        System.out.println("List Value:"+value);
        if(value.equals("3")){
            myList.remove("4");
            myList.add("6");
            myList.add("7");
        }
    }
    System.out.println("List Size:"+myList.size());