-2

重複の可能性:
StringBuilder と Java の toString() での文字列連結

私のコードでは、以下のような文字列連結を使用しています。コードレビューを行っているので、パフォーマンスチェックを行う必要があります。どちらが使いやすいか、どなたかご意見をお聞かせください。

quoteTreeMap.put(index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT + lastIndex,buffer.toString());

これを繰り返し使用しています

index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT + lastIndex

この値のみlastIndexが変更され、残りはすべて同じです。

パフォーマンスを向上させるコードの書き方 宣言してもいいですか

index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT

これはトップのように

String one=""index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT"

として使用できone+lastIndexますか?
参照用:

StringBuffer buffer = new StringBuffer();
buffer.append(CommonUtil.QUOTE_TREE_GROSS_PREM);
buffer.append(CommonUtil.QUOTE_TREE_SPACE);
buffer.append(CommonUtil.QUOTE_TREE_EQUALS);
buffer.append(CommonUtil.QUOTE_TREE_SPACE);
buffer.append(chcCalBreakDownObj.getPremium().getGrossPrem());
quoteTreeMap.put(index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT + lastIndex, buffer.toString());
lastIndex++;
clearBuffer(buffer);

コードレビューを行っているので、パフォーマンスチェックを行う必要があります。どちらが使いやすいか、どなたかご意見をお聞かせください。

4

6 に答える 6

7

何かを追加するたびStringBuilderに新しいを作成する必要がないため、を使用する必要があります。String

演算子を使用して+2 つの を連結Stringすると、新しいStringオブジェクトが作成されます。

StringBuilderとの主な違いStringBufferは、後者が同期されるため、一般的に前者よりも遅いことです。

興味のある方は公式ドキュメントをご覧ください。

于 2012-12-21T10:15:28.357 に答える
3

私には、時期尚早に最適化しているように聞こえます。

理解しやすく保守しやすいコードを書くことに集中してください。次に、それをプロファイリングしてボトルネックがどこにあるかを発見し、それから最適化します。

投稿する 2 つのバージョンのパフォーマンスの違いは、おそらく無関係です。

PS いずれにせよ、 と の違いを理解することは価値がStringBufferありStringBuilderます。StringBuffer クラスと StringBuilder クラスの違いを参照してください

于 2012-12-21T10:20:35.460 に答える
2

StringBuilderまたはを使用できますStringBufferStringBuilder複数のスレッドに対してスレッドセーフでありStringBuffer、単一のスレッドに役立ちます。単一のスレッドの実行速度が向上します。

于 2012-12-21T10:45:57.143 に答える
1

結果oneがすべての反復で同じになる場合は、ループの外で事前に生成します。one + lastIndexそうすれば、非効率性についてあまり心配することなく言うことができます。少なくともバッファを明示的に使用するのと同じくらい効率的です(CPUwise)。毎回文字列を最初から再構築するわけではないので、おそらくもっとそうです。半余分な文字列を 1 つ作成しますが、それはそれか StringBuilder のどちらかです。

indexfundIndex、またはCommonUtil.QUOTE_TREE_DOTが絶えず変化する場合、次の 2 つの選択肢があります。

  • StringBuilder を使用して、複数行にわたる結果を生成するか、または
  • すべての連結を 1 行で行います。すなわち:いいえString one = ...

他のほとんどのソリューションでは、余分な文字列が発生します。

于 2012-12-21T10:51:58.900 に答える
1

StringBufferまたはStringBuilderのいずれかを使用できます。違いは、StringBuffer がスレッドセーフであることです。これをメソッド内でのみ使用する場合は、StringBuilder を選択します。

于 2012-12-21T10:18:50.780 に答える
1

最初にコードのプロファイリングを行い、実際のパフォーマンス ホッグを見つける必要があります。示されているコードの一部で StringBuilder を使用すると、より高速になる可能性がありますが、全体的にどれくらい得られるのでしょうか?

于 2012-12-21T10:21:49.537 に答える