「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 項目 文字列の連結性能に注意する

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

2024 年 11 月 8 日に公開
ブラウズ:828

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

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

public String criaFatura(List 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 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 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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/giselecoder/item-63-cuidado-com-o-desempenho-da-concatenacaode-string-2b67?1 権利侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3