使用JAVA迭代器

使用JAVA迭代器,java,arraylist,iterator,Java,Arraylist,Iterator,我正在尝试使用“迭代器”删除此ArrayList中索引号为偶数的字符串。删除 import java.util.*; 导入静态java.lang.System.out; 班长 { 公共静态void main(字符串参数[]) { ArrayList al=新的ArrayList(); 迭代器i=al.Iterator(); 内伦; 扫描仪sc=新的扫描仪(System.in); out.printf(“大小:”); len=sc.nextInt(); while(len!=0) { al.add

我正在尝试使用“迭代器”删除此ArrayList中索引号为偶数的字符串。删除

import java.util.*;
导入静态java.lang.System.out;
班长
{
公共静态void main(字符串参数[])
{
ArrayList al=新的ArrayList();
迭代器i=al.Iterator();
内伦;
扫描仪sc=新的扫描仪(System.in);
out.printf(“大小:”);
len=sc.nextInt();
while(len!=0)
{
al.add(sc.next());
len-=1;
}
对象o;
对于(len=0;len

我在I.next()处得到“ConcurrentModificationException”;。怎么了?

您没有使用迭代器迭代更正,因此无法使用它删除元素。要正确使用它,必须使用迭代器本身进行循环

i、 e

for(迭代器iter=list.Iterator();iter.hasNext();){
E元素=iter.next();
//1-可以调用元素的方法
//2-可以使用iter.remove()从列表中删除当前元素
// ...
}
可能是这样的:

int count = 0;
for (Iterator<String> iter = al.iterator(); iter.hasNext(); ) {
   String element = iter.next();
   System.out.print(element);
   if (count % 2 == 0) {
       iter.remove();
       System.out.print(" -- has been deleted");
   }
   System.out.println();
   count++;
}
int count=0;
for(迭代器iter=al.Iterator();iter.hasNext();){
String元素=iter.next();
系统输出打印(元素);
如果(计数%2==0){
iter.remove();
系统输出打印(“--已删除”);
}
System.out.println();
计数++;
}

另一个选项是使用for循环在集合中向后循环。这是可行的,因为删除项目不会更改删除项目之前项目的顺序或索引。

您没有使用迭代器迭代更正,因此无法使用它删除元素。要正确使用它,必须使用迭代器本身进行循环

i、 e

for(迭代器iter=list.Iterator();iter.hasNext();){
E元素=iter.next();
//1-可以调用元素的方法
//2-可以使用iter.remove()从列表中删除当前元素
// ...
}
可能是这样的:

int count = 0;
for (Iterator<String> iter = al.iterator(); iter.hasNext(); ) {
   String element = iter.next();
   System.out.print(element);
   if (count % 2 == 0) {
       iter.remove();
       System.out.print(" -- has been deleted");
   }
   System.out.println();
   count++;
}
int count=0;
for(迭代器iter=al.Iterator();iter.hasNext();){
String元素=iter.next();
系统输出打印(元素);
如果(计数%2==0){
iter.remove();
系统输出打印(“--已删除”);
}
System.out.println();
计数++;
}

另一个选项是使用for循环在集合中向后循环。这可能会起作用,因为删除项目不会更改删除项目之前项目的顺序或索引。

您会收到错误,因为迭代器会检查修改,检查AbstractList类中存在的实现,其中定义了一个int变量modCount,该变量提供了列表大小更改的次数

查看此链接以获取详细答案:


由于迭代器检查修改,检查AbstractList类中存在的实现,在AbstractList类中定义了一个int变量modCount,该变量提供了列表大小更改的次数,因此出现了错误

查看此链接以获取详细答案:


使用迭代器,然后在其上调用remove():

Iterator itr=list.Iterator();
while(itr.hasNext()){
字符串s=itr.next();
如果(条件)
itr.remove();
}

使用迭代器,然后对其调用remove():

Iterator itr=list.Iterator();
while(itr.hasNext()){
字符串s=itr.next();
如果(条件)
itr.remove();
}

不理解您的最后一行。不理解您的最后一行。
int count = 0;
for (Iterator<String> iter = al.iterator(); iter.hasNext(); ) {
   String element = iter.next();
   System.out.print(element);
   if (count % 2 == 0) {
       iter.remove();
       System.out.print(" -- has been deleted");
   }
   System.out.println();
   count++;
}
Iterator<String> itr = list.iterator();

while (itr.hasNext()) {

    String s = itr.next();
   if (Condition)
     itr.remove();
}