java中拼接字符串的5種方法效率對比
前言
最近寫一個東東,可能會考慮到字符串拼接,想了幾種方法,但對性能未知,所以下面就來測試下面,話不多說了,來一起看看詳細的介紹吧。
示例代碼
public class Test { List<String> list = new ArrayList<>(); @Before public void init(){ IntStream.range(0, 100000).forEach((index) -> { list.add("str" + index); }); } @org.junit.Test public void test1() { String ss = ""; long startTime = System.currentTimeMillis(); for (String s : list) { ss += s; } System.out.println(System.currentTimeMillis() - startTime); } @org.junit.Test public void test2() { String ss = ""; long startTime = System.currentTimeMillis(); for (String s : list) { ss=ss.concat(s); } System.out.println(System.currentTimeMillis() - startTime); } @org.junit.Test public void test3() { StringBuilder ss = new StringBuilder(); long startTime = System.currentTimeMillis(); for (String s : list) { ss.append(s); } System.out.println(System.currentTimeMillis() - startTime); } @org.junit.Test public void test4() { long startTime = System.currentTimeMillis(); StringUtils.join(list); System.out.println(System.currentTimeMillis() - startTime); } @org.junit.Test public void test5() { StringBuffer ss = new StringBuffer(); long startTime = System.currentTimeMillis(); for (String s : list) { ss.append(s); } System.out.println(System.currentTimeMillis() - startTime); } }
第一種:33809
第二種:8851
第三種:6
第四種:12
第五種:7
性能:StringBuilder>StringBuffer>StringUtils.join>concat>+
然后從源碼層面分析下
StringBuilder:
每次字符串拼接都只是擴展內(nèi)部char數(shù)組,只生產(chǎn)一個最終的string,所以這種效率最高
StringBuffer:
與StringBuilder相比只是多加了個synchronized,所以在單線程的情況下相差不大
StringUtils.join:
可以看到其內(nèi)部還是用StringBuilder實現(xiàn),但是每次循環(huán)都多了個分隔符的判斷所以慢了一點,但是也不多,時間上來講是一個數(shù)量級的
concat:
可以看出每次連接都會生成一個string,所以效率很低
+:
因為是重載的運算符,找不到源碼,但是從結(jié)果來看效率最低
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Java實現(xiàn)IP地址到二進制的轉(zhuǎn)換
這篇文章主要為大家詳細介紹了Java實現(xiàn)IP地址到二進制的轉(zhuǎn)換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11nacos gateway動態(tài)路由實戰(zhàn)
這篇文章主要介紹了nacos gateway動態(tài)路由實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Java使用正則表達式檢索、替換String中特定字符和正則表達式的一切
這篇文章主要給大家介紹了關(guān)于Java使用正則表達式檢索、替換String中特定字符和正則表達式的一切,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09