1

JDKのソースコードを読んで、コードの言い回しと混同しました。コードのメソッドは、指定された配列の内容の文字列表現を返すことを意味します。

例:int [] a = {0,1、2、3、4、5、6、7、8、9};
戻り値:[1、2、3、4、5、6、7、8、9]

JDKバージョン

 public static String toString(int[] a) {
    if (a == null)
        return "null";
   int iMax = a.length - 1;
   if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

私の質問:
1、forループ
コードの外側にif条件を入れてみませんか:

 //the follow code efficiency may be better or not
 for (int i = 0; i< iMax; i++) {
        b.append(a[i]);
        b.append(", ");
    }
 return  b.append(a[iMax]).append(']').toString();

2、StringBuilderメソッド append 、パラメータがブラケットの場合、メソッドは文字列ではなくcharパラメータを使用します。 appendメソッドを深く掘り下げます。append(char c)アプローチは高効率に見えますが、よくわかりません。

ありがとう

4

4 に答える 4

2

コードは次のようにさらに最適化/リファクタリングできると思います。

public static String toString(int[] a) {
    if (a == null)
        return "null";
    StringBuilder b = new StringBuilder("[");
    int iMax = a.length - 1;
    if (iMax == -1)
         return b.append(']').toString();;
    for (int i = 0; i < iMax; i++)
        b.append(a[i]).append(", ");
    return b.append(a[iMax]).append(']').toString();
}
于 2012-05-17T09:45:03.680 に答える
0
  1. コードは数値を<(未満)で比較しますが、これは等しい比較(==)よりもパフォーマンスが向上することはなく、パフォーマンスが低下する可能性があります。そのため、JDKバージョンはより慎重に最適化され、考え抜かれています。

  2. はい、該当する場合は常にprimitveargを使用する方が効率的です。ヒープの割り当てやポインタの参照解除はありません(キャッシュミスやページフォールトの可能性を回避します)。

于 2012-05-17T09:31:43.957 に答える
0
  1. 「for」ループ内に「if」条件を記述する必要があります。「for」ループの構造は次のようになります。

      for(initialization, test condition, modifier expression)
    
     eg: for(int i=0 ; i<10 ; i++)
    

    上記の例のように、for(int i = 0;; i ++)にはテスト条件がないため、「for」ループ内に記述する必要があります。そうしないと、反復が継続されます。無限ループ。

  2. ここで、メソッドpublic static String toString(int [] a)の戻り型はStringであるため、toString()を使用して文字列形式に変換する方が簡単です。「char」の場合は、最初に次のように変換されます。ラッパーオブジェクト"Character"の場合、toString()を適用できます...面倒ですが...実行できます...

于 2012-05-17T10:03:06.557 に答える
-1

1.)ループの後にif条件を設定すると、ループを終了する前に文字列の最後にコンマが追加されます。結果は「[1、2、3、4、5、6、7、8、9]」になります。9の後の最後のコンマに注意してください。これは、作業を完了するための最も簡単な方法です。

2.)StringBuilderは、クリーンアップされない文字列プールに多くの文字列を入れたくない場合に使用されます。しかし、正直な答えはわかりません!

于 2012-05-17T10:36:01.937 に答える