java中的SpinedBuffer是什么?它是如何工作的?

java中的SpinedBuffer是什么?它是如何工作的?,java,java-8,java-stream,Java,Java 8,Java Stream,在Java Stream API实现中,他们使用一种数据结构,称之为SpinedBuffer,在Java文档中,他们将其描述如下: 一个或多个数组用于存储元素。与{@link ArrayList}使用的单个数组相比,使用多个数组具有更好的性能特性,如列表的容量需要时 要增加,不需要复制元素。这是 通常在遍历结果的情况下是有益的 几次 我想知道: 此数据结构如何使用多个阵列来提高性能 在这个数据结构的实现中还有另一个称为chunk的概念,什么是chunk,他们如何使用它来实现这个数据结构 Ar

在Java Stream API实现中,他们使用一种数据结构,称之为
SpinedBuffer
,在Java文档中,他们将其描述如下:

一个或多个数组用于存储元素。与{@link ArrayList}使用的单个数组相比,使用多个数组具有更好的性能特性,如列表的容量需要时 要增加,不需要复制元素。这是 通常在遍历结果的情况下是有益的 几次

我想知道:

  • 此数据结构如何使用多个阵列来提高性能

  • 在这个数据结构的实现中还有另一个称为chunk的概念,什么是chunk,他们如何使用它来实现这个数据结构


  • ArrayList
    分配单个数组。如果继续向其中添加元素,则在某个点上数组太小。您需要重新分配阵列,并将其中的所有内容复制到新阵列。这个
    SpinedBuffer
    有一个块列表。当您不断向其添加元素,并且所有的块都已满时,它只会分配一个新块(其中包含一个数组),以便添加更多元素。发生这种情况时,不需要复制现有的块。您可以查看源代码。Java是开源的。
    ArrayList
    分配单个数组。如果继续向其中添加元素,则在某个点上数组太小。您需要重新分配阵列,并将其中的所有内容复制到新阵列。这个
    SpinedBuffer
    有一个块列表。当您不断向其添加元素,并且所有的块都已满时,它只会分配一个新块(其中包含一个数组),以便添加更多元素。发生这种情况时,不需要复制现有的块。您可以查看源代码。Java是开源的。