把以前自己的測試寫一下,當時也一直在網上找怎麼輸入輸出快,在這裡記錄一下我目前知道的幾種輸入輸出方式吧。
有速度更快的歡迎留言交流。
輸入
我知道的有三種,分别是
Scanner
、
BufferedReader
、
StreamTokenizer
。
分别使用了 洛谷 和 CCF 進行了測試。
洛谷
洛谷使用的是題目是P3366,一道最小生成樹的題目,在解法不變的情況下,修改輸入方式
Scanner
最慢速度1000ms(逾時,可能更多),最大記憶體占用125MB(超出記憶體,可能更多)
BufferedReader
最慢速度548ms,最大記憶體占用87MB
StreamTokenizer
最慢速度285ms,最大記憶體占用23MB
CCF
使用的題目是 201412-4 最優灌溉,也是一道最小生成樹的題目。
測試結果如下:
測試代碼太久遠,找不到了。我就寫個如何使用吧,有興趣的可以自己去試試。這裡以輸入一個二維int數組為例子。三種輸入方式代碼如下:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// Scanner
// Scanner in = new Scanner(System.in);
// int n = in.nextInt(), m = in.nextInt();
// int[][] nums = new int[n][m];
// for ( int i = 0; i < n; i++ ) {
// for ( int j = 0; j < m; j++ ) {
// nums[i][j] = in.nextInt();
// }
// }
// BufferedReader
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String[] line = br.readLine().split(" ");
// int n = Integer.parseInt(line[0]), m = Integer.parseInt(line[1]);
// int[][] nums = new int[n][m];
// for ( int i = 0; i < n; i++ ) {
// line = br.readLine().split(" ");
// for ( int j = 0; j < m; j++ ) {
// nums[i][j] = Integer.parseInt(line[j]);
// }
// }
// StreamTokenizer
// Input in = new Input();
// int n = in.nextInt(), m = in.nextInt();
// int[][] nums = new int[n][m];
// for ( int i = 0; i < n; i++ ) {
// for ( int j = 0; j < m; j++ ) {
// nums[i][j] = in.nextInt();
// }
// }
// 輸出數組
// for ( int i = 0; i < n; i++ ) {
// for ( int j = 0; j < m; j++ ) {
// System.out.print(nums[i][j] + " ");
// }
// System.out.println();
// }
}
}
class Input {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws IOException {
in.nextToken();
return (int)in.nval;
}
}
輸出
我知道的有三種,分别是
直接System.out.println輸出
、
使用StringBuilder緩沖後輸出
、
PrintWriter輸出
。
使用的題目是 CCF 201503-1 圖像旋轉,測試結果如下:
測試代碼:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// 優化輸入
Input in = new Input();
int n = in.nextInt(), m = in.nextInt();
int[][] nums = new int[n][m];
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < m; j++ ) {
nums[i][j] = in.nextInt();
}
}
// 直接輸出
// for ( int i = m-1; i >= 0; i-- ) {
// for ( int j = 0; j < n; j++ ) {
// System.out.print(nums[j][i]+" ");
// }
// System.out.println();
// }
// StringBuilder緩沖輸出
// StringBuilder sb = new StringBuilder();
// for ( int i = m-1; i >= 0; i-- ) {
// for ( int j = 0; j < n; j++ ) {
// sb.append(nums[j][i]+" ");
// }
// sb.append("\n");
// }
// System.out.println(sb.toString());
// PrintWriter輸出
// PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
//
// for ( int i = m - 1; i >= 0; i-- ) {
// for ( int j = 0; j < n; j++ ) {
// out.print(nums[j][i] + " ");
// }
// out.println();
// }
// out.flush();
}
}
class Input {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws IOException {
in.nextToken();
return (int)in.nval;
}
}