intstream和stream< integer>之间有什么区别?

baubqpgj  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(512)

这个问题在这里已经有了答案

intstream比普通流有什么优势(1个答案)
上个月关门了。
我在想 IntStream 以及 Stream<Integer> . 我用下面的例子来说明:

int[] someInts = {1, 2, 3, 4, 5};
var intStream = Arrays.stream(someInts);
var streamInteger = Arrays.stream(someInts).boxed();

两者有什么区别?这种差异与绩效有何关系?

qhhrdooz

qhhrdooz1#

两者有什么区别? IntStream 是一股原始的 int 价值观。 Stream<Integer> 是一股 Integer 物体。
可用的操作列表不同,只需检查javadoc中的方法列表。例如 IntStream 具有内置的 range(...) 以及 sum() ,不是那样 sum() 很难相处 Stream<Integer> 使用 reduce() ,但它不是内置的。
这种差异与绩效有什么关系?
装箱和拆箱确实需要一些时间,但不是很多。很多临时装箱的对象也会更频繁地触发垃圾回收,这也是性能消耗。所有这些加起来,所以如果流在一个紧密的“循环”中处理大量整数值,那么差异可能是相关的。
更大的问题是空间,因为 Integer 相当大。一 int 值为4字节,而 Integer 引用是4字节,对象是16字节,所以 Integer 每个值使用20字节,即内存的5倍。
如果你打电话来,这一点尤其重要 toArray() ,因为 int[] 和一个 Integer[] ,空间方面。

mec1mxoz

mec1mxoz2#

Stream<Integer> 对装箱值进行操作( Integer 而不是原语int),后者占用大量内存,通常需要大量装箱/拆箱操作(取决于您的代码),而 IntStream 使用基本体。

相关问题