"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Item Cuidado com o desempenho da concatenação de string

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

Publicado em 2024-11-08
Navegar:968

1. Concatenação de Strings com o operador ( ):
Usar o operador para concatenar strings é conveniente para poucas concatenações, mas apresenta problemas de desempenho para operações em grande escala, devido à imutabilidade das strings.
Cada vez que uma nova string é criada, o conteúdo de todas as strings anteriores é copiado, resultando em um tempo quadrático para grandes concatenações.

Exemplo incorreto (concatenação repetida com ):

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 melhorar o desempenho:
Em vez de usar , utilize StringBuilder, que permite a modificação de strings de forma eficiente, alocando memória de maneira dinâmica conforme necessário.
O tempo de concatenação com StringBuilder é linear, o que melhora significativamente o desempenho.

Exemplo correto (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. Comparação de desempenho:
Mesmo após as melhorias no Java 6 para otimizar o operador , o uso de StringBuilder continua sendo mais eficiente. Em uma máquina de teste, o uso de StringBuilder foi 6,5 vezes mais rápido do que o operador em um cenário com 100 itens.

Exemplo de otimização sem pré-alocação:

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. A moral da história:
Não use para concatenar muitas strings. O desempenho se torna rapidamente inaceitável conforme o número de concatenações cresce.
Use StringBuilder.append ou alternativas como arrays de caracteres para grandes volumes de concatenações.

5. Outras alternativas:
Além do StringBuilder, é possível considerar o uso de arrays de caracteres para processamento em grande escala ou para combinar strings de maneira mais eficiente, especialmente quando é necessário um controle mais fino sobre o desempenho.

Conclusão:
Utilize StringBuilder para concatenar strings de maneira eficiente.
Evite usar o operador em loops ou para grandes volumes de strings, pois o desempenho degrada significativamente à medida que o número de concatenações aumenta.

Exemplos do livro:

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

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

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/giselecoder/item-63-cuidado-com-o-desempenho-da-concatenacaode-string-2b67?1 Caso haja alguma infração, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3