¿Cuál es la diferencia entre Stream.builder () y flujo de llamadas () en un ArrayList en Java?

Gregory Piwowarek:

¿Hay alguna diferencia entre usar Stream.builder()contra la creación de una ArrayListy luego llamar stream()en él?

Holger:

Este es un detalle de implementación, pero sí, el constructor está mejor optimizado para el caso de uso de ser llenado de forma incremental, seguida de una operación de streaming a través de los elementos contenidos.

En contraste, una ArrayListtiene que apoyar modificación arbitraria y de acceso aleatorio.

Por lo tanto, al añadir elementos a un repetidamente ArrayListsin especificar una capacidad inicial predijo correctamente, puede ser necesario asignar un nuevo y mayor variedad y copiar la matriz actual en ella cada vez que se agota la capacidad actual.

En contraste, el constructor tiene un soporte especial para el caso de un solo elemento, que no necesita una matriz en absoluto. Entonces, si se añaden más elementos, que se convertirá en una memoria intermedia espinosa . Este tampón se inicia con una pequeña gama como ArrayListpero cuando su capacidad se agota, se comienza a utilizar una matriz de matrices en lugar de copiar repetidamente la matriz a una matriz plana mayor.

Así que esto ahorra los gastos de copia que tendría al llenar un ArrayList. Puede guardar estos costes para ArrayListespecificando la capacidad inicial correcta, pero que sólo funciona cuando una estimación está disponible. Especificación de una capacidad inicial también elimina la optimización de la caja vacía. Por lo general, el constructor corriente puede tratar con tamaños desconocidos mucho mejor.

Otra característica de este diseño es que Stream.Builderse puede tratar con más de 2³¹ elementos, a diferencia ArrayList, si tiene suficiente memoria.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=445807&siteId=1
Recomendado
Clasificación