gpt4 book ai didi

java - java中迭代列表的各种方法的性能评估

转载 作者:行者123 更新时间:2023-12-01 22:17:45 24 4
gpt4 key购买 nike

我在java中创建了一个包含10个数字的整数列表。我想获得列表中数字的总和。为此,我使用了四种方法来迭代列表并返回总和。代码下面给出了相同的内容。

public static void main(String[] args) {

List<Integer> numbers=Arrays.asList(1,5,10,25,30,17,3,9,11,26);

//Using simple for loop for finding sum of numbers in the list
System.out.println(sumOfNumbersUsingSimpleForLoop(numbers));

//Using listIterator interface for finding sum of numbers in the list
System.out.println(sumOfNumbersUsingIterableInterface(numbers));

//Using enhanced for loop for finding sum of numbers in the list
System.out.println(sumOfNumbersUsingEnhancedForLoop(numbers));

//Using lambda expression for finding sum of numbers in the list
System.out.println(sumOfNumbersUsingLambdaExpression(numbers));



}
public static int sumOfNumbersUsingSimpleForLoop(List<Integer> numbers)
{
int sum=0;
for(int i=0;i<numbers.size();i++)
{
sum=sum+numbers.get(i);
}
return sum;
}
public static int sumOfNumbersUsingIterableInterface(List<Integer> numbers)
{
int sum=0;
ListIterator<Integer> iterator=numbers.listIterator();
while(iterator.hasNext())
{

sum=sum+iterator.next();

}
return sum;
}
public static int sumOfNumbersUsingEnhancedForLoop(List<Integer> numbers)
{
int sum=0;
for(int number:numbers)
{
sum=sum+number;
}
return sum;
}
public static int sumOfNumbersUsingLambdaExpression(List<Integer> numbers)
{
return numbers.stream().parallel().reduce(0, (e,num)->e+num);
}

所有这些方法都返回 137 作为结果。对我来说,使用 lambda 表达式计算总和很方便。但是,如果列表的大小变大,我不确定它的性能。这将非常有用如果有人可以说明所有方法的性能比较。

最佳答案

在您的情况下,顺序流不可能比 for 循环更快(流也会在列表上循环,但会产生一些开销)。 for 循环应该是等效的。

更重要的是,您的流示例比 for 循环版本会产生更多的装箱/拆箱操作。您可以通过以下方式改进:

return numbers.parallelStream().mapToInt(Integer::intValue).sum();

如果您的列表很大(我的猜测是:超过 10k+ 元素 - 低于该值,并行化的开销可能会太高),并行流可能会更快。

如果你真的需要性能,你应该使用基元......

关于java - java中迭代列表的各种方法的性能评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646771/

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