【发布时间】:2013-01-16 11:28:55
【问题描述】:
我用Java 编写了一个程序,使用Scanner 来获取每行用空格分隔的两个元素,然后将其放入ArrayList 中存储的对象中。它工作得很好,但是当涉及到 10000 行的输入时,它会变得很长。我阅读了一些主题和网站(例如this)告诉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 秒)
我是否朝着正确的方向前进以使程序更快地运行?还是问题出在使用循环遍历每一行?
【问题讨论】:
-
你能举个例子吗?
-
所以你想把每一行的二维数组放到ArrayList中?
-
我注意到,无论我在循环中放入什么,只要有“String[] val =scanner.nextLine().split(”“);”,就需要 8 秒阅读 12000 行,其他任何东西都可以在不到 1 秒的时间内完成。
-
在我使用字符串拆分的答案中查看下面的代码。这对你有影响吗?
-
起初完全误读了您的问题。我以为你正在阅读一个非常大的文件,所以 8 秒可能是现实的。显示示例行确实很有用。
标签: java performance optimization split buffer