设置增强for循环的初始值

时间:2015-04-28 17:24:20

标签: java for-loop

我将替换这个基本的for循环:

List<Long> list = new ArrayList<>();

for (int i = 1; i <= n; i++) {
 // do something with list
}

使用此增强版:

for (long i : list) {
    // do something with list
}

但第二个循环以0开头,我想从1

开始

3 个答案:

答案 0 :(得分:7)

这不是增强型for循环的工作方式,因为它们没有使用索引。如果你想从一个给定的索引开始,你将不得不采用标准的for循环。

答案 1 :(得分:2)

您可以使用带有初始索引for的标准1循环:

for (int i = 1; i < list.size(); i++) {
    // do something with list.get(i)
}

这可能是一个坏主意的一种情况是listLinkedList,而get LinkedList的时间复杂度为O(n)。在这种情况下,将增强的for循环与对subList

的调用相结合会更有效
for (Long a : list.subList(1, list.size())) {
    // do something with a.
}

在Java 8中我们也可以

list.subList(1, list.size()).forEach(...)

list.subList(1, list.size()).stream()...

答案 2 :(得分:1)

您需要考虑要迭代的内容。

如果您想使用列表中的值,并且您不关心索引,那么请选择增强的for循环:

for (Long value : list) {
    // do something with value
}

此处,value将在每个回合中包含列表的每个值。如果你的列表包含[5,10,2,9],那么value将在第一个循环中为5,在第二个循环中为10等。它与索引无关。

如果你需要索引,这里似乎是这样(但我们不知道为什么),然后用标准循环明确声明它。