【问题标题】:Arrays.asList() vs Stream.collect() [closed]Arrays.asList() 与 Stream.collect() [关闭]
【发布时间】:2020-07-06 08:31:16
【问题描述】:

哪个性能更好?

  1. Stream.of(stringArray).collect(Collectors.toList())
  2. Arrays.asList(stringArray)

【问题讨论】:

  • 他们做不同的事情。一个结果是一个从数组复制的新列表;另一个结果是由数组支持的列表。
  • 我希望第二个版本更高效,但只有一种方法可以确定:测量。

标签: java arrays java-stream


【解决方案1】:

您可以通过创建一个非常大的数组并计算您提到的两种技术的经过时间来进行测试,然后比较这两种经过的时间。这是一个例子:

String[] veryLargeStringArray = {"","",...};

long starttimelist1 = System.nanoTime();
List<String> list1 = Stream.of(veryLargeStringArray).collect(Collectors.toList());
long endtimelist1 = System.nanoTime();
System.out.println("list1 time : "+(endtimelist1-starttimelist1));
    
long starttimelist2 = System.nanoTime();
List<String> list2 = Arrays.asList(veryLargeStringArray);
long endtimelist2 = System.nanoTime();
System.out.println("list2 time : "+(endtimelist2-starttimelist2));

在我看来,Stream.of(veryLargeStringArray).collect(Collectors.toList())Arrays.asList(veryLargeStringArray) 有更多的子调用,而Arrays.asList(veryLargeStringArray) 只是一个ArrayList 的实例化。最后,这取决于您想在代码中做什么。

【讨论】:

  • 这不是您衡量绩效的方式。 stackoverflow.com/q/504103/829571
  • 对,但我认为使用nanoTime 在很大程度上就足够了,而不是currentTimeMillis
  • 纳米时间不是这里的问题,测试才是。
  • 唯一正确的说法是最后一句话:这取决于你想在你的代码中做什么。您是否需要一个可变列表来在修改时更改原始数组,或者您是否需要一个表示原始数组副本的未指定可变性列表...
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 2023-03-10
  • 2014-10-18
  • 2014-11-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多