ListIterator的add方法的死循环问题
答案:2 悬赏:50
解决时间 2021-01-04 12:48
- 提问者网友:冥界祭月
- 2021-01-04 05:28
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
List name = new ArrayList();
name.add("同学A");
name.add("同学B");
name.add("同学C");
name.add("同学D");
name.add("同学E");
name.add("同学F");
ListIterator li = name.listIterator();
while (li.hasNext()) {
//System.out.println(li.next());
li.add("下一个");
}
System.out.println(name);
}
}
如上代码就会造成死循环,但是如果把System.out.println(li.next());这行的注释取消就没问题,这是为什么呢?求解?
最佳答案
- 二级知识专家网友:都不是誰的誰
- 2021-01-04 06:02
首先可以调用ListIterator的add方法将元素插入原始List中,但是如果插入中间位置是否会陷入死循环呢,插入一个元素后,ListIterator的元素数量增加了,这样的话,相当于自己给自己添加元素,然后还遍历自己再添加元素。楼主是否还有更详细的描述,比如直插入原有的数据,再次插入的数据不再重复插入内之类的限制条件!
全部回答
- 1楼网友:野心和家
- 2021-01-04 06:57
效果没有区别,但使用上区别很大。 考虑在迭代中使用add()、remove()等方法 使用迭代器调用iterator.add()、iterator.remove()后,iterator.next()还是指向原来的元素 而使用for(int i = 0; i< list.size(); i++)循环调用list.add(i, obj)后,下一个i指向的是新增的元素,而调用list.remove(i),则下一个i会跳过一个元素。 因此大部分迭代的情况还是优先考虑使用迭代器。
我要举报
大家都在看
推荐资讯