【发布时间】:2013-07-10 15:51:17
【问题描述】:
谁能解释为什么会这样?文件大小最大为 2MB。代码执行时间不到 2 秒。
try {
while ((line = br.readLine()) != null) {
System.out.println(line);
}
catch(Exception e)
{
}
但是当我将代码更改为:
String temp = "";
try {
while ((line = br.readLine()) != null) {
temp =temp + line;
}
catch(Exception e)
{
}
我知道它会花费相对更多的时间,但它需要 470 秒的大量时间。为什么会有这种差异?
【问题讨论】:
-
字符串连接很慢。
-
StringBuilder可能是这里的一个选项! -
您正在将 O(N) 算法更改为 O(N^2) 算法,那么为什么它不会对较大的文件产生很大影响。
-
每次进行
+连接时,都会创建一个新的字符串对象。即使对象创建本身并不算太糟糕,您也会留下大量必须经常收集的垃圾。这种情况通常是导致 GC 行为不佳的主要原因。