我了解 Scanner 的用途,以及何时使用 Scanner 以及何时使用 BufferedReader。我读了一个不同的,但在一些类似的问题Scanner vs. BufferedReader
当我从输入中读取时,为什么 Scanner 这么慢? 我认为这与 Scanner 中有一个小缓冲区有关,但在这里我迷路了。最初的问题来自 Codechef,但我对该解决方案不感兴趣。
这是具有给定输入的代码示例:输入:
- 7 3
- 1
- 51
- 966369
- 7
- 9
- 999996
- 1
和代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
int numberOfLines = Integer.parseInt(s[0]);
int divideNumber = Integer.parseInt(s[1]);
int count = 0;
for (int i = 0; i < numberOfLines; i++) {
String number = br.readLine();
if (number.length() < 11) {
int num = Integer.parseInt(number);
if (num % divideNumber == 0) {
count++;
}
}
}
System.out.println(count);
}
}
如果我用扫描仪读取相同的代码,它会很慢。
上层的类/方法通常比下层的类/方法慢。
以同样的方式,您可能会问为什么搜索
regular expressions
比搜索慢
String.indexOf()
。其实我在SO上看到过这样的问题。你的类/方法越专业,它的性能就越好。
例如,它只做 1 件简单的事情,但可以快速高效地完成。
更通用的类/方法可以做例如 10-20 种不同的事情,因此它们
更强大,但因此它们更慢。
我在这里说的是笼统的,我没有
Scanner
和BufferedReader
我自己比较过。