2012-05-14 6 views
-1

私はので、これらの操作は、StringBufferのか、文字列の方がよいでしょう含まれ、プログラムに文字列操作の場合、文字列バッファまたは座位バッファが高速ですか?

int index=temp.lastIndexOf("\\n== External links ==\\"); 
     System.out.println(temp.substring(index)) 

のindexOf、部分文字列を次のコードの多くを行う必要がありますか?

もしそうなら、私を詳しく説明できますか?

+0

両方を試してみて、パフォーマンスを比較してください。そのようなトレードオフがあなたのコードベースでどのように働くかはわかりません。あなただけがこの質問に明確に答えることができます。 –

+0

何百、何千、何百万ものように "たくさん"?典型的な文字列の長さは何ですか? – assylias

+0

長期的には、あなたのコードベースによっては、Stringを使った作業がより速くなると思います。このアプローチは、StringがJVM内の専用メモリ領域を持つ特定のクラスであるため、より多くのメモリを消費します。 – kyiu

答えて

0

StringBuilderにはcontainsまたはStringBufferはありません。 indexOfおよび部分文字列はString自体に委譲されます。 StringBufferとStringBuilderは連結の方が高速ですが、Stringを調べる場合はStringクラス自体を取る

0

StringBufferまたはStringBuilderを使用すると、多くの文字列操作を実行するときに文字列を使用することが推奨されます。文字列を使用すると、「文字列定数プール」に多くの参照されないStringオブジェクトが残ります。

さらに、StringBuilderはStringBufferよりも優先されます(ただし、APIはまったく同じですが)。そのメソッドはスレッドセーフではない(つまり同期化されない)ため、処理が高速になります。

2

String.substringは、新しい文字列を作成せず、元の文字列にインデックスを付けるだけで、文字列コンテンツをコピーするコストを回避します。したがって、これがすべて必要な場合は、Stringで十分です(特にStringBuffer/StringBuilderにはcontainsメソッドがありません)。

OTOHの場合、StringBufferは同期化されているため、使用しないでください。パフォーマンスペナルティが発生します(Java5以降を使用している場合はStringBuilder)。

最後に、あなたが知るべき唯一の確実な方法は、実際のデータを使用して、自分の環境内の各オプションを測定することです。

関連する問題