gpt4 book ai didi

java - 我应该选择一个大循环还是许多较小的循环?

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:41 26 4
gpt4 key购买 nike

在使用 Java 时,我发现自己必须从长度为 n 的列表中创建 5 个不同的列表来响应。我正在考虑的两种方法是:

1.) 将我想要填充的列表分解到它们自己的方法中,并通过迭代每个方法中的 n 项来填充它们。

Response getResponse(Integer n) {
Response r = new Response();
r.getListOne().addAll(getListOne(n));
r.getListTwo().addAll(getListTwo(n));
return r;
}

List<Integer> getListOne(Integer n) {
List<Integer> listOne = new ArrayList<>();
for (Integer num : n)
listOne.add(createOne(num));
return listOne;
}

List<Integer> getListTwo(Integer n) {
List<Integer> listTwo = new ArrayList<>();
for (Integer num : n)
listTwo.add(createTwo(num));
return listTwo;
}

2.) 有一个循环,我一次填充所有列表。我可以在每次迭代中分解列表中每个对象的创建/填充。

Response getResponse(Integer n) {
Response r = new Response();
for (Integer num : n) {
r.getListOne().add(createOne(num));
r.getListTwo().add(createTwo(num));
}
return r;
}

我想知道这两种方法是否是首选,循环遍历 n 一次并在每次迭代中执行大量工作,或者将其分解为多个循环,每个循环遍历 n 项但执行较少的工作。我知道除非需要,否则我不应该考虑性能,但是除了不同程度的抽象和可重用性之外,还会有任何真正的性能优势吗?

注意:在我的示例中,我尝试使用整数实现两种基本方法。我正在处理的对象有些复杂。

最佳答案

让我们考虑以下两种情况:

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

for (int i = 0; i < 1e6; i++) {
list.add(i);
System.out.println(i);
}

还有

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

for (int i = 0; i < 1e6; i++) {
list.add(i);
}

for (int i = 0; i < 1e6; i++) {
System.out.println(i);
}

在这两种情况下,语句 list.add(i);System.out.println(i); 都被执行 1e6 次,这意味着一个大循环相当于多个较小的循环。

实际上,这很可能不会影响您,除非以某种方式获取迭代器的成本很高。

关于java - 我应该选择一个大循环还是许多较小的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928641/

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