我将替换这个基本的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
答案 0 :(得分:7)
这不是增强型for循环的工作方式,因为它们没有使用索引。如果你想从一个给定的索引开始,你将不得不采用标准的for循环。
答案 1 :(得分:2)
您可以使用带有初始索引for
的标准1
循环:
for (int i = 1; i < list.size(); i++) {
// do something with list.get(i)
}
这可能是一个坏主意的一种情况是list
是LinkedList
,而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等。它与索引无关。
如果你需要索引,这里似乎是这样(但我们不知道为什么),然后用标准循环明确声明它。