gpt4 book ai didi

java - 增强的 for 循环从 List 的一部分开始

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:24 24 4
gpt4 key购买 nike

我是 Java 的初学者,我有这个疑问。是否可以在 ArrayList 上使用 Java 中增强的 for 循环,但从指定点而不是 ArrayList[0] 开始。

For eg. ArrayList<Integer> calc = new ArrayList<Integer>;
// calc contains {0,1,2,3,4,5,6,7}

我可以使用增强的 for 循环并从 calc[2] 而不是 calc[0] 开始迭代吗?如果可能的话,我该怎么做?在我的特殊情况下,使用增强的 for 循环会更好,而不是普通的 for 循环。

最佳答案

Java 中最好的方法是这样的:

for (Integer i : calc.subList(start, calc.size()) {
...
}

subList 是原始列表的高效 View ,因此它几乎正是您所需要的。

更新

好的,受 Mikera 评论的启发,我在 jmh 上对其进行了基准测试。这是基准代码:

import org.openjdk.jmh.annotations.GenerateMicroBenchmark;

public class Benchmark1
{
static final List<Integer> list = new ArrayList(asList(1,2,3,4,5,6,7,8,9,10));
static { for (int i = 0; i < 5; i++) list.addAll(list); }

@GenerateMicroBenchmark
public long testIterator() {
long sum = 0;
for (int i : list) sum += i;
return sum;
}
@GenerateMicroBenchmark
public long testIndexed() {
long sum = 0;
for (int i = 0; i < list.size(); i++) sum += list.get(i);
return sum;
}
@GenerateMicroBenchmark
public long testSublistIterator() {
long sum = 0;
for (int i : list.subList(1, list.size())) sum += i;
return sum;
}
@GenerateMicroBenchmark
public long testIndexedSublist() {
long sum = 0;
final List<Integer> l = list.subList(1, list.size());
for (int i = 0; i < l.size(); i++) sum += l.get(i);
return sum;
}
}

结果如下:

Benchmark        ops/msec
-------------------------
Indexed 1860.982
IndexedSublist 1642.059
Iterator 1818.657
SublistIterator 1496.994

结论:

    主列表上的
  1. enhanced for 与索引迭代一样快,一旦超过初始化成本;

  2. 子列表的遍历比主列表的遍历有些慢,迭代有些比索引遍历慢;

  3. 出于所有实际目的,所有差异都可以忽略不计。

关于java - 增强的 for 循环从 List 的一部分开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com