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