【发布时间】:2018-01-03 11:29:05
【问题描述】:
以下代码块的结果是什么?
ArrayList<Integer> myList = new ArrayList<Integer>();
for (int i = 0; i < myList.size(); i++) {
myList.remove(i);
}
提供了答案,因为循环永远不会运行。
但是对于 [-1, 3, 28, 17, 9, 33] 的输入, 我得到 [3, 17, 33] 作为输出。什么意思?
【问题讨论】:
-
在每次迭代时都会评估条件子句,因此每次都会调用
myList.size()。只有 init 子句被调用一次。仅供参考:for(init;condition;iteration)。在您的逻辑中,您将删除第一个、第三个、第五个(奇数索引)、...元素,因为下一个元素将向左移动。如果要删除所有项目,只需从列表末尾开始,从右到左删除项目即可。