在Java中,如何更高效地追加字符串?

50

我写了一个Java程序,在其中需要将字符串

" u13a2" 追加到现有的字符串 "u1234 u12de u1386 ... u15a3" 中。

因此,字符串逐渐变得越来越长。 我发现每次追加所花费的时间也越来越长。 有没有办法可以在一定程度上改善这种情况?

我想到的实现方式包括:

unicodeArray += " "+unicode;

或者

unicodeArray = unicodeArray.concat(" "+unicode);

它们的性能相似。我认为导致这些差劣表现的主要原因是特殊类型String。它会在每次赋值时创建一个新对象。如果你也这样认为,这是否意味着我最好使用另一种类型,比如字节数组?


3
好的,我会尽力为您翻译。以下是需要翻译的内容:相关链接:http://en.wikipedia.org/wiki/Schlemiel_the_Painter%27s_algorithm - OrangeDog
8
我们需要多少个重复的 StringBuilder 答案? - Steve Kuo
2
@SteveKuo 投票关闭这个多余的问题比发表抱怨更快。 - Basil Bourque
很棒的链接,@OrangeDog - Alexandre Santos
5个回答

109

35
使用 StringBuilder 类。它在你所尝试的操作中更加高效。

8
您可以使用StringBufferStringBuilder进行此操作。这两个都是用于动态字符串操作的工具。其中,StringBuffer是线程安全的,而StringBuilder则不是。
在多线程环境中,请使用StringBuffer。但如果是单线程,则建议使用StringBuilder,它比StringBuffer快得多。

StringBuffer 也是线程安全的。请参阅 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuffer.html。 - Pradeep Pati
正好相反:StringBuilder不是线程安全的,而StringBuffer则是。 - assylias
但是谁会在并发线程中操纵单个CharSequence呢?我相信StringBuffer的线程安全性没有用处。 - Amir Pashazadeh
这完全取决于需求。 - Subhrajyoti Majumder

2

- 每次您附加或进行任何修改操作时,它都会创建一个新的String对象。

- 因此,请使用StringBuilderappend()方法(如果线程安全性重要),否则请使用StringBuffer(如果线程安全性重要),这是一种有效的方法。


0

java.lang.StringBuilder。使用int构造函数创建初始大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接