字处理性能:ArrayList.toArray()或StringBuilder.split()

时间:2014-04-13 11:03:04

标签: java performance

我正在将换行符分隔的文本文件读入String - 数组。

因为我知道分隔符总是\n,所以我应该能够将每个单词附加到StringBuilder,然后使用分隔符将其拆分。

简单地说,我应该使用哪种方法以及为什么?

方法A:
1.创建一个ArrayList(或其他更适合的Collection)
2.将每一行添加到列表中 3.返回list.toArray()

方法B:
1.创建一个StringBuilder
2.将每行附加到构建器
3.返回builder.split("\n")

3 个答案:

答案 0 :(得分:1)

不确定它有多大区别,toArray方法很可能更快,因为String处理较少。 split必须使用正则表达式处理整个数据; toArray方法只需要遍历Collection

如果您修改方法 B ,那么您就不会逐行阅读StringBuilder中的文件,而是使用Files.readAllBytes来获取整个文件文件为String然后split您可能会发现或多或少相同的效果。

如果你有Java 8:

final Path path = /*some path*/
final String[] lines = Files.lines(path).toArray(String[]::new);

注意,使用Files.readAllLines可以改善您的方法 A

final String[] lines = Files.readAllLines(path, StandardCharsets.UTF_8).
    toArray(new String[0]);

答案 1 :(得分:0)

可能差别很小。我不认为你正在处理非常大的文件,所以它应该没关系。如果你真的对它感兴趣,你可以描述不同的方式,但你做出的选择是无关紧要的。

如果是我的选择,我会选择ArrayList方式,因为后续的分割似乎是多余的。

答案 2 :(得分:0)

等等,如果您以这种格式阅读文件:

A
B
C
D
E
F

为什么不在同一时间阅读并保存?

类似的东西:

BufferedReader bufferedReader = new BufferedReader(new FileReader("test.txt"));
List<String> lines = new ArrayList<String>();

for (String line; (line = bufferedReader.readLine()) != null; )
{
    lines.add(line);
}

System.out.println(lines);

您的[A, B, C, D, E, F, G] lines将会List