2011-05-25 7 views
5

A menudo uso listas en mis aplicaciones de Android. En este momento estoy creando una página de Twitter que enumera un máximo de 50 "tweets" de un usuario.Declaración de la capacidad de una lista en Java

tengo una lista definida de esta manera:

List<Tweet> tweets = new ArrayList<Tweet>(MAX_TWEETS);

Dónde Tweet es una información de actualización el tipo de objeto personalizado de retención de twitter (texto, fecha, nombre de usuario, etc) y MAX_TWEETS es un valor entero constante (50)

Preguntas:

¿Cuál es la ventaja de establecer la capacidad inicial de esta List, si las hay?

¿Debo molestarme en establecer una capacidad cuando sé que mi lista será tan pequeña? ¿Cuándo debería/no debería establecer una capacidad?

Respuesta

2

La capacidad predeterminada de ArrayList se establece en 10 (consulte la fuente jdk 1.6). Eso significa que se asignará una matriz de tamaño 10 en la creación. Si va a agregar el elemento número 11, la capacidad aumentará a 16. Luego aumentará una vez que llegue a 21.

Si no espera más de 50 elementos, la matriz cambiará de tamaño como máximo 3 veces. Dado ese pequeño número, realmente no importa mucho. Establézcalo en 50 si le da la tranquilidad de guardar en la copia de la matriz.

En realidad esto es correcto fórmula de aumento de tamaño:

int newCapacity = (oldCapacity * 3)/2 + 1; 
2

¿Cuál es el beneficio de establecer la capacidad inicial de esta lista?

Asignará la memoria de ese tamaño internamente y, cuando crezca, reasignará memoria y voluntad. si proporcionamos la capacidad inicial adecuada, podemos guardar algún ciclo de la CPU mientras se reestablecen los desbordamientos.

2

Al establecer la capcidad de la lista solo se especificará qué tan grande será. el único lado bueno para hacer esto será el hecho de que cuando agrega elementos que exceden el tamaño predeterminado de una lista, no tiene que extender la lista.

ejemplo: ¿configura la lista a 25 y la predeterminada es 10? (no 100% seguro) si agrega 24 elementos, no tendrá que hacer crecer la lista. si lo dejó como predeterminado, crecerá.

esperanza esto ayuda

3

Ajuste de la capacidad inicial puede aumentar el rendimiento al rellenar la lista, y también puede reducir el consumo de memoria de la lista si no agrega más de ese número de temas a la lista.

La huella de la memoria de una lista que ha crecido, y podría tener una matriz de soporte que es mayor que el número de elementos almacenados se pueden reducir mediante la invocación de trimToSize()

2

La capacidad inicial de ayuda si usted sabe que va a necesitar exactamente esa cantidad Creará un contenedor que podrá hacer referencia a los artículos MAX_TWEETS. Si lo supera, el sistema creará una nueva lista con el doble de elementos y luego copiará sobre la lista original (que es lo suficientemente común en aplicaciones Java).

3

De forma predeterminada, en Java 6, el tamaño de una lista es 10. Es decir, el sistema crea diez ranuras de memoria en la matriz subyacente. Si intenta agregar el 11º elemento, solo se crea la copia de Array. Proporcionar un tamaño mejora el rendimiento.

2

ArrayList, como su nombre lo indica, se implementa como una matriz (a diferencia de una lista vinculada). Al especificar el tamaño inicial, puede evitar tener que hacer crecer la matriz al agregar elementos. Esta es una operación costosa, se debe crear una nueva matriz y luego copiar los elementos existentes. Entonces, si conoce los valores máximos antes de tiempo, nunca debería tener que hacer esto.

En realidad, si el tamaño de su lista es 50 y solo hay una instancia de esta matriz, la matriz solo se expandirá varias veces, por lo que en este caso podría no ser importante. Aún así, su enfoque es bueno en caso de que cambie la variable más tarde.

2

Se asignará la memoria en la creación y no tendrá que copiar hasta que se pasa de eso.

Pero, sinceramente, con solo 50 objetos, la copia no requerirá mucho esfuerzo de todos modos, así que dudo mucho que veas algún aumento en el rendimiento. Sin embargo, no hay inconveniente en especificar el tamaño, por lo que es mejor que lo haga.

Cuestiones relacionadas