21

私はこのようなことをしています:

for (int i = 0; i < 100000; i++) {
   System.out.println( i );
}

基本的に、私は整数を計算し、文字列を約10K〜100K回出力してから、結果をsystem.outに書き込む必要があります。各結果は、改行で区切られます。

これを達成するための最速の方法は何ですか?

4

5 に答える 5

5

大量のデータの場合、System.out.printlnバッファリングがうまくいかないため、非効率的である可能性があります。その場合、BufferedOutputStreamまたはを使用できますBufferedWriter

于 2012-08-06T05:58:07.653 に答える
4

I/O 操作は、インメモリ処理 (整数の解析など) に比べて非常に遅いことに注意してください。したがって、文字列全体を「事前に」作成してから、一度だけ印刷することをお勧めします(もちろん、可能であれば):

StringBuilder sb = new StringBuilder();

for(int i = 0 ; i < 100000; i++) { sb.append(i).append("\n");}
String printMe = sb.toString(); 
System.out.println(printMe);

使用している出力ストリームのレベルをバッファリングするなどのさまざまな手法がありますが、最も基本的なものを使用することを好むと思いますSystem.out.println

お役に立てれば

于 2012-08-06T05:57:36.413 に答える
0

System.out への書き込みで最も遅い部分は、書き込み内容を表示するのにかかる時間です。つまり、あなたが書く行ごとに、コンピューターはフォントを使用して情報をピクセルに変換し、行全体をスクロールする必要があります。これは、テキストを表示するために行う可能性が高いものよりもはるかに多くの作業です。

コンソールへの書き込みを高速化するには、

  • 書く量を減らす (通常は最良のアイデア)
  • 代わりにファイルに書き込む (これは 5 ~ 10 倍速くなる可能性があります)
于 2012-08-06T07:38:02.203 に答える