拼接字符串+,StringBuilder,StringUtils.join,StringJoiner(JDK8)

+拼接的時(shí)候底層會(huì)使用StringBuilder,如果是非循環(huán)體和使用StringBuilder相差無幾,如果是循環(huán)體,就會(huì)在循環(huán)體內(nèi)每次循環(huán)的時(shí)候new一個(gè)StringBuilder對(duì)象,創(chuàng)建很多次對(duì)象,造成運(yùn)行效率下降。

5種方法用時(shí)比較:
StringBuilder<StringBuffer<concat<+<StringUtils.join
StringUtils.join效率應(yīng)該沒有很差,這里應(yīng)該不準(zhǔn)確
總結(jié):
1、如果不是在循環(huán)體中進(jìn)行字符串拼接的話,直接使用+就好了。
2、如果在并發(fā)場(chǎng)景中進(jìn)行字符串拼接的話,要使用StringBuffer來代替StringBuilder
3、StringUtils.join用于將數(shù)組元素用某個(gè)字符串拼接起來
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%
    }
}

從運(yùn)行結(jié)果可以看出for循環(huán)拼接的效率最低,建議使用StringUtils的join方法,
經(jīng)過測(cè)試join方法有倆個(gè),其中數(shù)組的效率比迭代器的高

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容