+
拼接的時候底層會使用StringBuilder
掌眠,如果是非循環(huán)體和使用StringBuilder
相差無幾痴奏,如果是循環(huán)體梦抢,就會在循環(huán)體內(nèi)每次循環(huán)的時候new
一個StringBuilder
對象案糙,創(chuàng)建很多次對象地啰,造成運行效率下降策彤。
5種方法用時比較:
StringBuilder<StringBuffer<concat<+<StringUtils.join
StringUtils.join效率應(yīng)該沒有很差栓袖,這里應(yīng)該不準確
總結(jié):
1、如果不是在循環(huán)體中進行字符串拼接的話店诗,直接使用+
就好了裹刮。
2、如果在并發(fā)場景中進行字符串拼接的話庞瘸,要使用StringBuffer
來代替StringBuilder
必指。
3、StringUtils.join
用于將數(shù)組元素用某個字符串拼接起來
4恕洲、Java8新增了StringJoiner
用于將list拼成字符串
StringJoiner例子塔橡,其中參數(shù)是分隔符
StringJoiner stringJoiner = new StringJoiner(";");
stringJoiner.add("a").add("b").add("c");
System.out.println(stringJoiner.toString()); //a,b,c
以下代碼比較了將list轉(zhuǎn)為‘,’拼接的字符串三種方法的效率
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.StopWatch;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class GhwTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
//構(gòu)造字符串list
for (int i = 0; i < 100000; i++) {
list.add(String.valueOf(i));
}
StopWatch stopWatch = new StopWatch();
stopWatch.start("Commons的StringUtils");
// 1.使用Apache Commons的StringUtils
String str1 = StringUtils.join(list.toArray(), ",");
// 2.通過遍歷
stopWatch.stop();
stopWatch.start("迭代器拼接");
StringBuilder str2 = new StringBuilder();
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
String string = iterator.next();
str2.append(string);
if (iterator.hasNext()) {
str2.append(",");
}
}
stopWatch.stop();
String result = "";
stopWatch.start("for循環(huán)拼接");
for (String str : list) {
result += "str" + ",";
}
if (result.endsWith(",")) {
result = result.substring(0, result.length() - 1);
}
stopWatch.stop();
System.out.println(stopWatch);
//StopWatch '': running time (millis) = 13795;
[Commons的StringUtils] took 123 = 1%;
[迭代器拼接] took 0 = 0%;
[for循環(huán)拼接] took 13672 = 99%
}
}
從運行結(jié)果可以看出for循環(huán)拼接的效率最低,建議使用StringUtils的join方法霜第,
經(jīng)過測試join方法有倆個葛家,其中數(shù)組的效率比迭代器的高