[英]Word processing performance: ArrayList.toArray() or StringBuilder.split()
我正在將換行符分隔的文本文件讀取為String
-array。
由於我知道定界符將始終為\\n
,因此我應該能夠將每個單詞附加到StringBuilder,然后使用定界符對其進行拆分。
簡而言之,我應該使用哪種方法,為什么?
方法A:
1.創建一個ArrayList(或另一個更合適的Collection)
2.將每一行追加到列表中
3.返回list.toArray()
方法B:
1.創建一個StringBuilder
2.將每一行追加到構建器
3.返回builder.split("\\n")
不確定是否有很大的區別,因為較少的String
處理,所以toArray
方法很可能會更快。 split
將不得不使用正則表達式處理所有數據; toArray
方法只需要遍歷Collection
。
如果修改方法B,以便不將文件逐行讀取到StringBuilder
而是使用Files.readAllBytes
將整個文件作為String
獲取,則split
您可能會發現性能Files.readAllBytes
相同。
如果您有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]);
可能差別很小。 我認為您無論如何都不會處理非常大的文件,所以沒關系。 如果您確實對它感興趣,可以使用不同的方法來進行描述,但是您所做的選擇是無關緊要的。
如果可以選擇,我會采用ArrayList
方式,因為僅用於后續拆分的串聯似乎是多余的。
等待,如果您以這種格式讀取文件:
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);
您的lines
List
中將有[A, B, C, D, E, F, G]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.