java - ListIterator的add方法的死循环问题
巴扎黑
巴扎黑 2017-04-17 13:25:27
[Java讨论组]
import java.util.*;

public class Main {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<String> name = new ArrayList<String>();
    name.add("同学A");
    name.add("同学B");
    name.add("同学C");
    name.add("同学D");
    name.add("同学E");
    name.add("同学F");
    ListIterator<String> li = name.listIterator();
    while (li.hasNext()) {
        //System.out.println(li.next());
        li.add("下一个");
        }    
    System.out.println(name);
    }
}

调用ListIterator的add方法将元素插入原始List中,但是如果插入中间位置是否会陷入死循环呢,插入一个元素后,ListIterator的元素数量增加了,这样的话,相当于自己给自己添加元素,然后还遍历自己再添加元素,就如上面的代码就会造成死循环,但是如果把System.out.println(li.next());这行的注释取消就没问题,这是为什么呢?

巴扎黑
巴扎黑

全部回复(1)
巴扎黑

你可以这样输出看看:

import java.util.*;

public class Main {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<String> name = new ArrayList<String>();
    name.add("同学A");
    name.add("同学B");
    name.add("同学C");
    name.add("同学D");
    name.add("同学E");
    name.add("同学F");
    ListIterator<String> li = name.listIterator();
    int cnt = 0;
    while (li.hasNext()) {
        //System.out.println(li.next());
        li.add("下一个");
        if(cnt++ >= 20)
            break;
        }    
    System.out.println(name);
    }
}

add方法是在Iterator指向的元素前面插入新元素的,插入后Iteratro指向的元素是新插入的元素后面的那个元素(也就是调用add前Iterator指向的元素)。所以如果不调用next方法,Iterator总是指向 "同学A",然后每次add就是在 "同学A" 前面插入 "下一个",就死循环了,但是如果每次循环调用next,Iterator就依次指向了"同学A"、"同学B"、"同学C" ...,就能够正常结束循环。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号