【发布时间】:2016-12-24 05:20:29
【问题描述】:
我想知道什么时候可以有效地使用IntStream.range。我不确定IntStream.range 有多大用处的三个原因。
(请将开始和结束视为整数。)
-
如果我想要一个数组,
[start, start+1, ..., end-2, end-1],下面的代码要快得多。int[] arr = new int[end - start]; int index = 0; for(int i = start; i < end; i++) arr[index++] = i;这可能是因为
IntStream.range(start, end).toArray()中的toArray()非常慢。 我使用 MersenneTwister 对数组进行洗牌。 (我在网上下载了 MersenneTwister 课程。)我认为没有办法使用 MersenneTwister 随机播放
IntStream。我不认为仅仅从
start到end-1获取int数字是有用的。我可以使用for(int i = start; i < end; i++),这看起来更容易而且不慢。
你能告诉我什么时候应该选择IntStream.range吗?
【问题讨论】:
-
您可以使用
IntStream.range()将结果流作为参数传递给不同的方法。for无法做到这一点。 -
一个面试问题最好通过 IntStream.range 来解决:Array list algorithm - Interview
-
这可能是因为 toArray() [...] 非常慢。。你是如何测量这个的?您可以发布或链接到有效的基准吗? “非常慢”是什么意思?
-
@Nickel 您的基准很可能存在缺陷。衡量 Java 性能不像比较两个时间戳。
-
@Nickel:您的
range2方法没有任何作用。当然,将值写入数组比什么都不做需要更多的时间,但是与您声称toArray比for循环执行相同操作慢的相关性在哪里?
标签: java java-8 java-stream