domingo, 11 de octubre de 2015

Java - Concatenar cadenas con +: Un pecado mortal

Recientemente he estado revisando los apuntes y algunos libros de programación para retomar mi trabajo en Java. Una de las primeras anotaciones importantes que encontré en dicha información es la que resalta el uso de las clases StringBuffer y StringBuilder.

Supongamos que se tiene la siguiente clase, cuyo único propósito es concatenar un conjunto de 100000 caracteres en un único objeto String:



Como se puede apreciar, la concatenación se realiza con el operador +. Luego de ejecutar dicho programa, se puede verificar que el tiempo de ejecución del mismo el de alrededor de 9000 ms (existía en algunos casos cierta variabilidad de unos 200 a 300 ms que no comprendo aún porque ocurre). Tal y como en mis libros ponía, decidí verificar el rendimiento del mismo programa pero usando las clases mencionadas en el título de esta entrada. Las versiones fueron las siguientes:


Los resultados obtenidos fueron una descomunal diferencia de tiempo entre el concatenar por medio del operador + y el uso de las clases StringBuilder y StringBuffer. Ya que en algunas veces existía diferencia entre las ejecuciones, decidí ejecutar cada programa en 5 ocasiones y después resumir los resultados en una tabla, la cual muestro a continuación:


Como es evidente, el uso del operador + aumenta dramáticamente la ejecución de una clase sencilla como la que se ha tomado de ejemplo. Las clases StringBuffer y StringBuilder son la forma más adecuada de realizar una concatenación, sobre todo en proyectos donde el trabajo con caracteres sea fundamental. De momento, el pecado de concatenar con + solo debería ser ‘permisible’ en una que otra línea de código… como para imprimir un resultado en un out.println… ¿o no?

Para una próxima entrada, diferenciaremos entre StringBuffer y StringBuilder.




No hay comentarios:

Publicar un comentario