Prefacio
Recientemente escribí algo que puede haber considerado el empalme de cadena y pensado en varios métodos, pero el rendimiento es desconocido, así que probemos a continuación. Echemos un vistazo a la introducción detallada juntos.
Código de muestra
prueba de clase pública {list <string> list = new ArrayList <> (); @Bebore public void init () {intstream.range (0, 100000) .forEach ((index) -> {list.add ("str" + index);}); } @org.junit.test public void test1 () {string ss = ""; Long Starttime = System.CurrentTimemillis (); for (cadena s: list) {ss += s; } System.out.println (System.CurrentTimemillis () - Starttime); } @org.junit.test public void test2 () {string ss = ""; Long Starttime = System.CurrentTimemillis (); for (cadena s: list) {ss = ss.concat (s); } System.out.println (System.CurrentTimemillis () - Starttime); } @org.junit.test public void test3 () {stringBuilder ss = new StringBuilder (); Long Starttime = System.CurrentTimemillis (); for (cadena s: list) {ss.append (s); } System.out.println (System.CurrentTimemillis () - Starttime); } @org.junit.test public void test4 () {long starttime = system.currentTimemillis (); StringUtils.Join (lista); System.out.println (System.CurrentTimemillis () - Starttime); } @org.junit.test public void test5 () {StringBuffer ss = new StringBuffer (); Long Starttime = System.CurrentTimemillis (); for (cadena s: list) {ss.append (s); } System.out.println (System.CurrentTimemillis () - Starttime); }}El primer tipo: 33809
El segundo tipo: 8851
El tercer tipo: 6
El cuarto tipo: 12
El quinto tipo: 7
Performance: StringBuilder>StringBuffer>StringUtils.join>concat>+
Luego analícelo desde el nivel del código fuente
StringBuilder:
Cada empalme de cadena solo expande la matriz de caracteres internos y produce solo una cadena final, por lo que esta es la más eficiente
StringBuffer:
En comparación con StringBuilder, solo hay uno más sincronizado, por lo que la diferencia no es grande en un solo caso roscado.
StringUtils.Join:
Puede ver que todavía se implementa internamente con StringBuilder, pero cada bucle tiene un separador adicional para juzgar, por lo que es un poco más lento, pero no mucho, y es un orden de magnitud en el tiempo.
Concat:
Se puede ver que cada conexión generará una cadena, por lo que la eficiencia es muy baja
+:
Debido a que es un operador sobrecargado, no se puede encontrar el código fuente, pero la eficiencia es la más baja según los resultados
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.