1

を使用してJavaでプログラムを作成し、Scanner各行からスペースで区切られた2つの要素を取得して、にストックされたオブジェクトに配置しましたArrayList。それは完全に機能しますが、10000行の入力になると非常に長くなります。いくつかのトピックや Web サイト (この など) を読みましたが、これよりBufferedReaderもはるかに効率的であることScannerがわかりましたが、試してみても改善は見られませんでした。

これまでに入力の各行を解析するために使用した行は次のとおりです。

  String charsetName = "UTF-8";
  Scanner scanner = new Scanner(new BufferedInputStream(System.in), charsetName);

次に、呼び出している行数の間にループが実行されています。

 String[] mid = scanner.nextLine().split(" ");

だから私は次のように置き換えようとしましScannerた:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] base = reader.readLine().split(" ");

何も変更されませんでした (どちらの場合も 12000 行で 8 秒)

プログラムの動作を大幅に高速化するために、正しい方向に進んでいますか? それとも、ループを使用して各行を通過することから問題が発生していますか?

4

1 に答える 1

2

次のコードを使用して、280,000 行(スペースで区切られた 1 行あたり 2 つの単語で構成される) のファイルを読み取り、それらをスペースで分割しました。0.105 秒かかりました。ですから、あなたが解析している行とそれを使って何をしているのかについてもっと知りたいです。さらにコードを貼り付けてください。

  public static void main(String args[]) throws Exception {

    Date start = new Date();

    BufferedReader b = new BufferedReader(new FileReader("aa.txt"));
    String line;
    while ((line = b.readLine())!=null) {
      String[] splat = line.split(" ");
    }
    b.close();

    Date end = new Date();
    System.out.println("Took " + (end.getTime() - start.getTime()) / 1000.0 + " seconds");
  }

上記のコードを変更して、各スプラット配列を配列リストに追加しました(なぜこれを行うのかわかりませんが、OPから、これがあなたがやろうとしていることだと思います)。コードは 0.244 秒まで遅くなりました。それでも1秒もかかりません。詳細を教えてください。

補足 - FULL CODE (でコンパイルjavac Julien.java)。aa.txt をファイル名に置き換えることを忘れないでください。

import java.util.*;
import java.io.*;

public class Julien {

  public static void main(String args[]) throws Exception {

    Date start = new Date();
//    List arrl = new ArrayList();
    BufferedReader b = new BufferedReader(new FileReader("aa.txt"));
    String line;
    while ((line = b.readLine())!=null) {
      String[] splat = line.split(" ");
//      arrl.add(splat);
    }
    b.close();
    Date end = new Date();
    System.out.println("Took " + (end.getTime() - start.getTime()) / 1000.0 + " seconds");
  }
}
于 2013-01-16T01:42:40.147 に答える