web-dev-qa-db-ja.com

StringBuilder insert()とappend()のパフォーマンス?

StringBuilderクラスのinsert()とappend()のパフォーマンスに違いはありますか?テキスト識別子としてたくさんの短い文字列を作成し、この質問を自問します... SBを区切り文字で初期化し、挿入+追加を使用する必要がありますか、それとも単に追加する必要がありますか?

12
Palcente

知っています:

  • 文字列表現の最後にあるinsertは、時間計算量(O(n))の点でappendと同等です。
  • insertは、最後以外の場所でできませんappendで取得できます(目的が異なるため)。
  • 詳細については、insertには最大3つのSystem.arraycopy(ネイティブ)呼び出しが含まれる場合がありますが、append1です。

あなたは簡単に結論付けることができます:

  • 文字列表現の最後に挿入する場合は、appendを使用します
  • それ以外の場合は、insertを使用します

そうすることで、最高のパフォーマンスが得られます。しかし、繰り返しになりますが、これら2つの方法は2つの異なる目的を果たします(最後に挿入することを除いて)、ここでは本当の問題はありません。

5

それらは異なる機能と異なる複雑さを持っています、

インサート:

  1. (バッキングアレイの容量を確保し、必要に応じて古いアレイをコピーする必要があります)
  2. 挿入インデックス(オフセット)でアイテムの先頭にある要素をプッシュします

追加する場所:

  1. (バッキングアレイの容量を確保し、必要に応じて古いアレイをコピーする必要があります)
  2. 配列の末尾に新しい要素を追加します

したがって、常にテールに追加する場合は、挿入によって要素がプッシュされないため、パフォーマンスは同じになります。

だから、私は追加を使用します、それはただきれいです。

1
Sleiman Jneidi