Uso de colecciones pequeñas (de 1 a 10 elementos) a nivel de instancia en Java

StackOverflow https://stackoverflow.com/questions/57145

  •  09-06-2019
  •  | 
  •  

Pregunta

Mientras creo clases en Java, a menudo me encuentro creando colecciones a nivel de instancia que sé de antemano que serán muy pequeñas: menos de 10 elementos en la colección.Pero no sé la cantidad de elementos de antemano, por lo que normalmente opto por una colección dinámica (ArrayList, Vector, etc.).

class Foo
{
  ArrayList<Bar> bars = new ArrayList<Bar>(10);
}

Una parte de mí sigue insistiéndome que es un desperdicio usar colecciones dinámicas complejas para algo de tamaño tan pequeño.¿Existe una mejor manera de implementar algo como esto?¿O es esta la norma?

Tenga en cuenta que no sufro ninguna penalización de rendimiento (notable) ni nada por el estilo.Solo soy yo preguntándome si no hay una mejor manera de hacer las cosas.

¿Fue útil?

Solución

El ArrayList clase en Java tiene sólo dos miembros de datos, una referencia a un Object[] matriz y un tamaño, que necesitará de todos modos si no utiliza un ArrayList.Entonces, la única ventaja de no usar un ArrayList es guardar la asignación de un objeto, lo que probablemente nunca será un gran problema.

Si está creando y eliminando muchas, muchas instancias de su clase de contenedor (y por extensión su ArrayList ejemplo) cada segundo, usted podría Tengo un pequeño problema con la rotación de recolección de basura, pero eso es algo de lo que debemos preocuparnos si alguna vez ocurre.La recolección de basura suele ser la menor de sus preocupaciones.

Otros consejos

Para simplificar las cosas, creo que esto prácticamente no es un problema.Su implementación es lo suficientemente flexible como para que, si los requisitos cambian en el futuro, no se vea obligado a realizar una refactorización.Además, no vale la pena agregar más lógica a su código para una solución híbrida, teniendo en cuenta su pequeño conjunto de datos y la alta calidad de la API Collection de Java.

Colecciones de Google tiene colecciones optimizadas para inmutables/pequeños números de elementos.Ver Lists.asList API como ejemplo.

Los gastos generales son muy pequeños.Es posible escribir una lista de matriz híbrida que tenga campos para los primeros elementos y luego recurrir a una matriz para listas más largas.

Puede evitar por completo la sobrecarga del objeto de lista utilizando una matriz.Para ir aún más allá, puede declarar el campo como Objeto y evitar la matriz por completo para un solo elemento.

Si la memoria realmente es un problema, es posible que desee olvidarse del uso de instancias de objetos en el nivel bajo.En su lugar, utilice una estructura de datos más grande con un mayor nivel de granularidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top