ホームページ >Java >&#&チュートリアル >項目 文字列の連結性能に注意する

項目 文字列の連結性能に注意する

DDD
DDDオリジナル
2024-10-17 22:24:29739ブラウズ

1.演算子 ( ) を使用した文字列連結:
演算子を使用して文字列を連結すると、少数の連結には便利ですが、文字列の不変性により大規模な操作ではパフォーマンスの問題が発生します。
新しい文字列が作成されるたびに、以前のすべての文字列の内容がコピーされるため、大規模な連結では二次時間が発生します。

間違った例 ( との繰り返しの連結):

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

2. StringBuilder を使用してパフォーマンスを向上させる:
を使用する代わりに、StringBuilder を使用します。これにより、文字列を効率的に変更し、必要に応じてメモリを動的に割り当てることができます。
StringBuilder との連結時間は直線的であるため、パフォーマンスが大幅に向上します。

正しい例 (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.パフォーマンスの比較:
演算子を最適化するために Java 6 が改良された後でも、StringBuilder の使用は引き続き効率的です。テスト マシンでは、アイテムが 100 個あるシナリオで StringBuilder を使用すると、オペレーターよりも 6.5 倍高速でした。

事前割り当てなしの最適化の例:

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.この話の教訓:
多くの文字列を連結するためにこれを使用しないでください。連結数が増えると、パフォーマンスはすぐに許容できなくなります。
大量の連結には StringBuilder.append または文字配列などの代替手段を使用します。

5.その他の選択肢:
StringBuilder に加えて、特にパフォーマンスをより細かく制御する必要がある場合、大規模な処理や文字列をより効率的に組み合わせるために文字配列の使用を検討することもできます。

結論:
StringBuilder を使用して文字列を効率的に連結します。
連結数が増えるとパフォーマンスが大幅に低下するため、ループ内や大量の文字列に対して演算子を使用することは避けてください。

本の例:

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

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

以上が項目 文字列の連結性能に注意するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。