2009-05-05 16 views
5

Estaba revisando la documentación de Java y encontré el método clear() de ArrayLists.Utilidad de ArrayList <E> .clear()?

¿De qué sirve esto, en lugar de simplemente reasignar un nuevo objeto ArrayList a la variable?

+0

Tenga en cuenta que el método clear() está definido por Collection. También está presente en la interfaz de Mapa. –

Respuesta

14

Debido a que puede haber múltiples referencias a la lista, es preferible y/o más práctico borrarla que reasignar todas las referencias.

Si vacía mucho su matriz (dentro de, por ejemplo, un bucle grande) no tiene sentido crear muchos objetos temporales. Seguro que el recolector de basura eventualmente los limpiará pero no tiene sentido desperdiciar recursos si no tiene que ser así.

Y porque borrar la lista es menos trabajo que crear uno nuevo.

+3

En realidad, hay casos en los que reutilizar una colección puede causar problemas de memoria. En resumen, si una ArrayList grande (o similar) se mantiene durante mucho tiempo, se promociona a la generación titular. Entonces, cualquier elemento que contenga que pueda ser basura en la generación joven no se puede recolectar sin una generación completa (que analiza la generación de tenencia y puede ver que los elementos son realmente basura). – erickson

1

borrar() no reasigna un objeto nuevo, por lo que es menos de un golpe de rendimiento.

2

Imagine la situación en la que hay varias referencias de la misma java.util.ArrayList a lo largo de su código. Sería casi imposible o muy difícil crear una nueva instancia de la lista y asignarla a todas las variables. ¡Pero java.util.ArrayList.clear() hace el truco!

3

Es posible que haya un campo final (variable de clase) List:

private final List<Thing> things = ... 

En algún lugar de la clase que desea borrar (eliminar todo) cosas. Como things es final, no se puede reasignar. Además, probablemente no desee reasignar una nueva instancia de Lista ya que ya tiene una Lista perfectamente buena instanciada.

2

Paga menos con la clara que con la creación de un nuevo objeto si su objetivo era realmente claro.

La reasignación de una referencia no borra el objeto. La suposición es que si no hay otras referencias a ella, sería recuperada por el GC relativamente pronto. De lo contrario, acabas de conseguir un desastre.

2

Además de las razones mencionadas, borrar una lista suele ser más semánticamente correcto que crear una nueva. Si su resultado deseado es una lista borrada, la acción que debe tomar es borrar la lista, no crear una nueva lista.

Cuestiones relacionadas