嵌套列表迭代器。程序不会终止

时间:2017-06-09 10:34:42

标签: java iterator

以下是我的计划。

public class NewClass {
    public static void main(String[] args) {
        List<String> cars = new ArrayList<String>();
        cars.add("Maruti");
        cars.add("Hundai");
        cars.add("Polo");
        Iterator<String> literate1 =  cars.iterator();
        while (literate1.hasNext()){
            System.out.println(literate1.next());
            literate1.remove();
            Iterator<String> literate2 =  cars.iterator();
            while (literate2.hasNext()){
            }
        }
    }
}

输出

Maruti

打印此结果后,程序不会终止。你能解释一下发生了什么吗?

3 个答案:

答案 0 :(得分:2)

literate2.hasNext()始终返回true。所以while循环永远不会结束。

答案 1 :(得分:2)

请检查以下代码。它会起作用。

List<String> cars = new ArrayList<String>();
cars.add("Maruti");
cars.add("Hundai");
cars.add("Polo");
Iterator<String> literate1 =  cars.iterator();
while (literate1.hasNext()) {
    System.out.println(literate1.next());
}

在您的代码中,内部while循环的条件为literate2.hasNext()。它实际上一直都是真的。出于这个原因,它创造了一个无限循环。

答案 2 :(得分:1)

while (literate2.hasNext()){
}

无限循环就在那里。在调用next()之前,如果有更多项,hasNext()将始终返回true。