use*_*763 4 java time-complexity bufferedreader java.util.scanner
由于在用户输入值的情况下,缓冲阅读器比扫描仪类快得多,但是正如在大多数算法竞赛或采访中所观察到的那样,单个输入行上通常有多个整数。因此,使用 Scanner 类变得更容易 -
Scanner in=new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
Run Code Online (Sandbox Code Playgroud)
如果是 Buffered Reader,您必须先输入一行(因为没有 readInt 选项),然后根据其上的整数数解析该行 -
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a,b;
String line = br.readLine();
String[] strs = line.trim().split("\\s+");
a=Integer.parseInt(strs[0]);
b=Integer.parseInt(strs[1]);
Run Code Online (Sandbox Code Playgroud)
虽然在后一种情况下输入可能会更快,但是解析将获得的字符串分成单个整数会不会花费很多时间?因此,在这种情况下,以上哪一个更优化或更快?
谢谢你。
非常错误的方法:您正在谈论用户输入。您如何处理在人类时间尺度上提供的东西绝对无关紧要。
人类以“秒”为单位进行操作,在某些情况下为“毫秒”。
而 Scanner 和 BufferedReader 之间在性能方面的差异可能在微秒的范围内,甚至可能在纳秒的范围内。
即使我们不谈论人类在控制台上输入内容(而是使用管道,例如cat somefile | java Whatever) - 您仍然会大规模发生IO。您的应用程序将花费 99.99% 的时间等待 IO 发生。最后如何处理传入的字符串并不重要。
换句话说:你最好把时间花在编写干净的代码上,以一种易于被人类读者理解的直接方式完成工作。然后让 JIT 发挥它的魔力。
由于问题特别是关于处理“基于文件”的输入 -自己去配置文件。我会在这里做什么:
你看,最后两段代码会做非常相似的事情。扫描仪仍在处理某些事情,您必须深入研究相应的源代码一段时间才能了解扫描仪解析和 BufferedReader 读取 + 手动解析之间的潜在差异。