Maison  >  Article  >  Java  >  Attention aux performances de concaténation de chaînes

Attention aux performances de concaténation de chaînes

DDD
DDDoriginal
2024-10-17 22:24:29613parcourir

1. Concaténation de chaîne avec l'opérateur ( ):
L'utilisation de l'opérateur pour concaténer des chaînes est pratique pour quelques concaténations, mais présente des problèmes de performances pour les opérations à grande échelle en raison de l'immuabilité des chaînes.
Chaque fois qu'une nouvelle chaîne est créée, le contenu de toutes les chaînes précédentes est copié, ce qui entraîne un temps quadratique pour les grandes concaténations.

Exemple incorrect (concaténation répétée avec ) :

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

2. Utiliser StringBuilder pour améliorer les performances :
Au lieu d'utiliser , utilisez StringBuilder, qui vous permet de modifier les chaînes efficacement, en allouant dynamiquement de la mémoire selon vos besoins.
Le temps de concaténation avec StringBuilder est linéaire, ce qui améliore considérablement les performances.

Exemple correct (utilisation de StringBuilder) :

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

3. Comparaison des performances :
Même après les améliorations apportées à Java 6 pour optimiser l'opérateur, l'utilisation de StringBuilder continue d'être plus efficace. Sur une machine de test, l'utilisation de StringBuilder était 6,5 fois plus rapide que l'opérateur dans un scénario avec 100 éléments.

Exemple d'optimisation sans pré-allocation :

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

4. La morale de l'histoire :
Ne l'utilisez pas pour concaténer plusieurs chaînes. Les performances deviennent rapidement inacceptables à mesure que le nombre de concaténations augmente.
Utilisez StringBuilder.append ou des alternatives telles que des tableaux de caractères pour de grands volumes de concaténations.

5. Autres alternatives :
En plus de StringBuilder, vous pouvez envisager d'utiliser des tableaux de caractères pour un traitement à grande échelle ou pour combiner des chaînes plus efficacement, en particulier lorsqu'un contrôle plus précis des performances est nécessaire.

Conclusion :
Utilisez StringBuilder pour concaténer efficacement des chaînes.
Évitez d'utiliser l'opérateur dans des boucles ou pour de gros volumes de chaînes, car les performances se dégradent considérablement à mesure que le nombre de concaténations augmente.

Exemples du livre :

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn