8

ベンチマーク用に1MBの文字列を作成したいので、次のようにコードを記述しました。

public final static long KB     = 1024;
public final static long MB     = 1024 * KB;
public static void main(String[] args){
    String text_1MB=createString(1*MB);
}
static String createString(long size){
    StringBuffer o=new StringBuffer();
    for(int i=0;i<size;i++){
        o.append("f");
    }
    return o.toString();
}

createStringこの方法は良くなくてばかげていると思います

メソッドを最適化するためのアイデアはありcreateStringますか?

4

7 に答える 7

18

どうですか:

char[] chars = new char[size];
// Optional step - unnecessary if you're happy with the array being full of \0
Arrays.fill(chars, 'f');
return new String(chars);
于 2012-06-19T07:43:58.440 に答える
10

大きな文字配列を作成するだけです。

char[] data = new char[1000000];

実際のオブジェクトを作成する必要がある場合はString、次のことができます。

String str = new String(data);
于 2012-06-19T07:45:47.670 に答える
4
char[] s = new char[1024 * 1000];
String str = String.copyValueOf(s);
于 2012-06-19T08:04:02.147 に答える
2

文字配列を作成し、new String(char[])コンストラクターを使用します。

于 2012-06-19T07:44:13.007 に答える
0

StringBuilderを使用して、容量を設定します。

static String createString(long size){
    StringBuilder o=new StringBuilder(size);
    for(int i=0;i<size;i++){
        o.append("f");
    }
    return o.toString();
}
于 2012-06-19T08:14:31.840 に答える
0

StringBufferの代わりにクラスStringBuilderを使用するのはどうですか?StringBuilderは、StringBufferとは異なり同期されないため、より高速になるはずです。

おそらく、コンパイラフラグを設定してヒープメモリと仮想メモリを増やすことで、パフォーマンスを向上させることができます。確かに傷つくことはありません。

于 2012-06-19T07:58:22.817 に答える
0
new String(ByteBuffer.allocate(1024).array());

1024バイトのByteBufferを割り当ててから、そのバッキング配列から新しい文字列を作成します。

于 2017-01-01T22:52:08.383 に答える