ArrayList for循环迭代器导致无限循环

时间:2016-12-16 14:34:31

标签: java for-loop arraylist iterator

我正在尝试遍历ArrayList并打印其中的每个元素,但它只输出ArrayList中的第一个元素。然后是一个无限循环,它不断打印出第一个元素。

ArrayList<String> startTime = new ArrayList<String>();

for (int i = 0; i < startTime.size(); i++) {
    String getTime = startTime.get(i);
    getTime = convertTime(getTime);
    startTime.add(i, getTime);
    System.out.println(startTime.get(i));
}

4 个答案:

答案 0 :(得分:1)

明确使用高级for循环:

ArrayList<String> startTime = new ArrayList<String>();
for(String aStartTime: startTime){
  // do something
}

答案 1 :(得分:1)

执行startTime.add(i, getTime)时,您要在i位置添加元素。这意味着在下一次迭代中,您将在列表中添加一个额外的元素。当您递增计数器并检查startTime.size()时,它始终为true。因此,你的无限循环。

作为建议,如果要添加getTime元素,可能需要使用某种辅助结构,如另一个List。

答案 2 :(得分:0)

尝试使用此for循环:

for(int i=0,n=startTime.size();i<n;i++){
    //your for-loop code here  

}

当您向startTime添加元素时,它的大小正在增加。因此,它增加了i必须无限相遇的边界。在我的示例中,n将在循环开始时设置为startTime的大小,并且不会随循环执行而改变。

答案 3 :(得分:0)

您可以尝试向后循环(从最后一个元素到第一个元素),例如:

// assume that I have ArrayList variable named *list*

for(int i = list.size() - 1 ; i >= 0 ; i--){
    list.add(//something);
}

此代码不会给您无限循环,因为即使您的列表大小不断变化,循环控制变量也永远不会改变(i> = 0)。下界将始终为0, i 会减小为0