优化 String += 还是 Concat? [复制]
Posted
技术标签:
【中文标题】优化 String += 还是 Concat? [复制]【英文标题】:Optimize String += or Concat? [duplicate] 【发布时间】:2013-04-05 12:00:09 【问题描述】:我正在编写一个可能包含 1000 个数据点的文件。我有所有这些课程,目前正在最后写入所有数据(数据点以 1s 的间隔获取)。我目前正在做的事情写在下面,而且很慢。更改将字符串/字节写入文件的方式会更好吗?还是在应用程序运行时将此信息写入某个文件指针会更好?
顺便说一句,getAccuracy()
之类的所有东西都是浮点数/整数(因此它也必须转换它们)。
fileStr = "";
fileStr += "timestamp,Accuracy,Altitude,Latitude,Longitude,GPSSatelliteEntries\r\n";
for (Iterator<Entry> i = entries.iterator(); i.hasNext(); )
Entry item = i.next();
long ts = item.getTs();
DataEntry d = item.getD();
List<GPSSatelliteEntry> satellites = item.getG();
// write stuff
fileStr += ts + ",";
fileStr += d.getAccuracy() + "," + d.getAltitude() + "," + d.getLatittude() + "," + d.getLongitude() + ",";
fileStr += "[";
boolean entered = false;
for (Iterator<GPSSatelliteEntry> j = satellites.iterator(); j.hasNext(); )
GPSSatelliteEntry item2 = j.next();
entered = true;
fileStr += "(" + item2.getAzimuth() + "," + item2.getElevation() + "," + item2.getPrn() + "," + item2.getSnr() + "),";
// chop off extra ,
if (entered)
fileStr = fileStr.substring(0, fileStr.length() - 1);
fileStr += "]";
fileStr += "\r\n";
【问题讨论】:
StringBuilder/Buffer woot woot! 对于整数和浮点数(或整数和浮点数),我建议使用 String.valueOf() 见***.com/questions/47605/… @Aquillo 所以你不建议使用Float.toString()
和Integer.toString()
?
@MasterGberry 如果是原语,使用toString()
,否则使用String.valueOf()
【参考方案1】:
每当您使用字符串时,请使用StringBuilder
或StringBuffer
以获得更好的性能。
别忘了String
就是immutable,每次修改String
都会创建一个新的实例,这会降低性能。
【讨论】:
究竟什么是“努力工作”?如果 String 是不可变的,那么如何修改它呢?以及如何创建一个新的“字符串”“成本性能”? 任何工作都很辛苦,我建议尽可能少做。创建一个新字符串会“降低性能”,因为在创建字符串时会发生与内存分配、指针和其他事情相关的操作。使用类似 StringBuilder 的东西可以让您节省这种开销,因为您使用的是单个对象。当应用于大型数据集时,您会发现性能存在显着差异。【参考方案2】:很可能是string buffer
线程安全、可变的字符序列。字符串缓冲区类似于字符串,但可以修改。
或前往string builder
【讨论】:
【参考方案3】:StringBuilder stuff = new StringBuilder();
stuff.append("PUT YOUR STRINGS HERE");
stuff.append("PUT YOUR STRINGS HERE");
然后你可以使用'stuff'来打印字符串。 把它放在一个循环中,用计时器迭代一个大数,看看有什么好处,这很有趣。
【讨论】:
当然也可以链接,在这种情况下可能会很有用。 链式是一个很好的建议。在每个追加调用中链接而不是使用字符串连接将节省循环。以上是关于优化 String += 还是 Concat? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
java中String,StringBuilder,StringBuffer实现原理,优化