如何使这个Java代码更快?

时间:2014-06-02 23:24:26

标签: java arrays performance arraylist

这段代码运行正常,但对于我提交它的地方来说太慢了......

我正在进行澳大利亚信息学竞赛,此代码必须在0.5秒内运行。 一些问题需要0.4,这是正确的,但它超时,否则这是废话! 有没有办法让它更快? Plzz

这是:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws IOException{

    Scanner input = new Scanner(new File("encyin.txt"));
    BufferedWriter output = new BufferedWriter(new FileWriter("encyout.txt"));

    int length = input.nextInt();
    int questions_length = input.nextInt();

    ArrayList<Integer> page_words = new ArrayList<Integer>();
    ArrayList<Integer> questions = new ArrayList<Integer>();

    while(input.hasNextInt() && page_words.size() < length) {
        page_words.add(input.nextInt());
    }

    while(input.hasNextInt() && questions.size() < questions_length) {
        questions.add(input.nextInt()-1);
    }

    for (int i = 0; i<questions.size(); i++) {
        output.write(String.valueOf(page_words.get(questions.get(i))+"\n"));
    }

    input.close();
    output.close();

}


}

谢谢你们:)

1 个答案:

答案 0 :(得分:-1)

在生产者/消费者模型中使用两个线程,但这只有在您不受IO约束时才有用。即使你不受IO限制,如果它是一个寻道时间很长的单个磁盘,你可能会让事情变得更糟。

但实际上,你可能已经受到IO限制了。扫描程序也可能没有使用缓冲IO。