Java颠倒了在for循环中访问列表的顺序

时间:2015-09-29 11:53:46

标签: java

我想颠倒在for()

中访问List的顺序

这是我的实际代码

for(int i = 0; i < states.size(); i++) {
    System.out.println(states.size());
    states.get(i).update(true); // restore the first blockstate
    states.remove(i); // remove the first blockstate from the list
}

此代码有效,但我想撤消它。我已经尝试过其他方法,比如使用i--,但它没有用。有人可以提出建议吗?

2 个答案:

答案 0 :(得分:5)

  

我已经尝试过其他方式,例如使用i--,但它不起作用。

撤销for循环包含三个步骤:

  • 将初始值更改为最后一个值
  • 在传递初始值后将条件更改为停止
  • 反转增量/减量(即++变为--

在您的代码中,此更改将如下所示:

for(int i = states.size()-1 ; i >= 0 ; i--) {
    System.out.println(states.size());
    states.get(i).update(true); // restore the current blockstate
    states.remove(i); // remove the current blockstate from the list
}

请注意,原始循环中达到的最后一个值为states.size()-1,而不是states.size(),因此i也需要从states.size()-1开始。

由于您的循环最终会清除列表,但是一次只能清除一个元素,您可以通过删除remove(i)的调用来更清晰,在循环后将其替换为states.clear()

for(int i = states.size()-1 ; i >= 0 ; i--) {
    System.out.println(states.size());
    states.get(i).update(true); // restore the current blockstate
}
states.clear();

答案 1 :(得分:0)

试试这个:

List list = Lists.reverse(states); 
for(int i = 0; i < list.size(); i++) {
    System.out.println(list.size());
    list.get(i).update(true); // restore the first blockstate
    //list.remove(i); // remove the first blockstate from the list
 }

如果你想在访问元素时删除元素,那么你必须使用iterator,因为它是不可能的......它会抛出并发修改异常