"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Artículo Cuidado con el rendimiento de la concatenación de cadenas

Artículo Cuidado con el rendimiento de la concatenación de cadenas

Publicado el 2024-11-08
Navegar:777

1. Concatenación de Strings con el operador ( ):
Usar el operador para concatenar cadenas es conveniente para algunas concatenaciones, pero presenta problemas de rendimiento para operaciones a gran escala debido a la inmutabilidad de las cadenas.
Cada vez que se crea una nueva cadena, se copia el contenido de todas las cadenas anteriores, lo que genera un tiempo cuadrático para concatenaciones grandes.

Ejemplo incorrecto (concatenación repetida con ):

public String criaFatura(List itens) {
    String fatura = "";
    for (Item item : itens) {
        fatura  = item.toString();  // ineficiente para grandes listas
    }
    return fatura;
}

2. Uso de StringBuilder para mejorar el rendimiento:
En lugar de usar , use StringBuilder, que le permite modificar cadenas de manera eficiente, asignando memoria dinámicamente según sea necesario.
El tiempo de concatenación con StringBuilder es lineal, lo que mejora significativamente el rendimiento.

Ejemplo correcto (uso de StringBuilder):

public String criaFatura(List itens) {
    StringBuilder fatura = new StringBuilder(itens.size() * 80);  // pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

3. Comparación de rendimiento:
Incluso después de las mejoras en Java 6 para optimizar el operador, el uso de StringBuilder sigue siendo más eficiente. En una máquina de prueba, usar StringBuilder fue 6,5 veces más rápido que el operador en un escenario con 100 elementos.

Ejemplo de optimización sin preasignación:

public String criaFatura(List itens) {
    StringBuilder fatura = new StringBuilder();  // sem pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

4. La moraleja de la historia:
No lo utilices para concatenar muchas cadenas. El rendimiento rápidamente se vuelve inaceptable a medida que aumenta el número de concatenaciones.
Utilice StringBuilder.append o alternativas como matrices de caracteres para grandes volúmenes de concatenaciones.

5. Otras alternativas:
Además de StringBuilder, podrías considerar el uso de matrices de caracteres para procesamiento a gran escala o para combinar cadenas de manera más eficiente, especialmente cuando se necesita un control más preciso sobre el rendimiento.

Conclusión:
Utilice StringBuilder para concatenar cadenas de manera eficiente.
Evite utilizar el operador en bucles o para grandes volúmenes de cadenas, ya que el rendimiento se degrada significativamente a medida que aumenta el número de concatenaciones.

Ejemplos del libro:

Item  Cuidado com o desempenho da concatenação de string

Item  Cuidado com o desempenho da concatenação de string

Declaración de liberación Este artículo se reproduce en: https://dev.to/giselecoder/item-63-cuidado-com-o-desempenho-da-concatenacaode-string-2b67?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3