永发信息网

java容器Iterator问题,请高手解答,为什么会报这种错,原因是什么啊????

答案:5  悬赏:0  手机版
解决时间 2021-02-22 11:21
  • 提问者网友:謫仙
  • 2021-02-21 18:06
代码:
import java.util.*;

public class SimpleIterator {
public static void main (String[] args) {
List<String> str = Arrays.asList("aa","dd","ss","fff","44","bb","gg","zz","xxx");
Iterator<String> it = str.iterator();
for(int i=0;i<3;i++) {
it.next();
it.remove();
}
System.out.println (str);
}
}

报错:--------------------Configuration: <Default>--------------------
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:172)
at java.util.AbstractList$Itr.remove(AbstractList.java:437)
at SimpleIterator.main(SimpleIterator.java:9)

Process completed.
改造后:
import java.util.*;

public class SimpleIterator {
public static void main (String[] args) {
ArrayList<String> str = new ArrayList<String>();
for(int i=0;i<10;i++) {
String s = i+"";
str.add(s);
}
System.out.println (str);
Collection c=null;
c = str;
Iterator it = c.iterator();
for(int i=0;i<6;i++){
System.out.println(it.next());
it.remove();
}
System.out.println (str);
}
}
明白remove删除的是什么了。呵呵
对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
方法名称得到了改进。
此接口是 Java Collections Framework 的成员。
最佳答案
  • 五星知识达人网友:轮獄道
  • 2021-02-21 19:40
迭代
不只支持集合remove方法,这样集合大小会变化,你要么用for要么用迭代不要混用

for(Iterator<String> it = str.iterator();it.hasNext();)
{

it.next();
it.remove();

}
全部回答
  • 1楼网友:逐風
  • 2021-02-22 00:36
打酱油
  • 2楼网友:孤独的牧羊人
  • 2021-02-21 23:19
迭代器不支持remove操作。具体我也没弄清。remove操作只能在next后执行,应该是可以的啊。
  • 3楼网友:琴狂剑也妄
  • 2021-02-21 21:47
remove void remove()从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的集合,则迭代器的行为是不明确的。 抛出: UnsupportedOperationException - 如果迭代器不支持 remove 操作。 IllegalStateException - 如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法。 用Iterator遍历时要特别注意,不能一边遍历一边操作对它的元素进行add或remove操作,不然会报错。我上一会也是这样,结果整了老半天才明白。
  • 4楼网友:野味小生
  • 2021-02-21 20:25
remove void remove()从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的集合,则迭代器的行为是不明确的。 抛出: UnsupportedOperationException - 如果迭代器不支持 remove 操作
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯