欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中拼接字符串的5種方法效率對比

 更新時間:2018年01月02日 09:29:01   作者:justlinzhihe  
這篇文章主要給大家介紹了關(guān)于java中拼接字符串的5種方法效率對比的相關(guān)資料,文中通過示例代碼和圖片介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

最近寫一個東東,可能會考慮到字符串拼接,想了幾種方法,但對性能未知,所以下面就來測試下面,話不多說了,來一起看看詳細的介紹吧。

示例代碼

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中使用BigDecimal進行精確運算

    Java中使用BigDecimal進行精確運算

    這篇文章主要介紹了Java中使用BigDecimal進行精確運算的方法,非常不錯,需要的朋友參考下
    2017-02-02
  • java垃圾回收之實現(xiàn)串行GC算法

    java垃圾回收之實現(xiàn)串行GC算法

    學習了GC算法的相關(guān)概念之后,?我們將介紹在JVM中這些算法的具體實現(xiàn)。首先要記住的是,?大多數(shù)JVM都需要使用兩種不同的GC算法?——?一種用來清理年輕代,?另一種用來清理老年代
    2022-01-01
  • Java web含驗證碼及權(quán)限登錄實例代碼

    Java web含驗證碼及權(quán)限登錄實例代碼

    這篇文章主要介紹了Java web含驗證碼及權(quán)限登錄實例代碼,所用到的開發(fā)工具為myeclipse10,MySQL數(shù)據(jù)庫,具體實現(xiàn)代碼大家參考下本文吧
    2017-03-03
  • 深入理解java.lang.String類的不可變性

    深入理解java.lang.String類的不可變性

    不可變類只是其實例不能被修改的類。每個實例中包含的所有信息都必須在創(chuàng)建該實例的時候就提供,并且在對象的整個生命周期內(nèi)固定不變,感興趣的可以了解一下
    2021-06-06
  • Java實現(xiàn)IP地址到二進制的轉(zhuǎn)換

    Java實現(xiàn)IP地址到二進制的轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了Java實現(xiàn)IP地址到二進制的轉(zhuǎn)換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • nacos gateway動態(tài)路由實戰(zhàn)

    nacos gateway動態(tài)路由實戰(zhàn)

    這篇文章主要介紹了nacos gateway動態(tài)路由實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解SpringBoot中實現(xiàn)依賴注入功能

    詳解SpringBoot中實現(xiàn)依賴注入功能

    這篇文章主要介紹了詳解SpringBoot中實現(xiàn)依賴注入功能,SpringBoot的實現(xiàn)方式基本都是通過注解實現(xiàn)的。有興趣的可以了解一下。
    2017-04-04
  • Java使用正則表達式檢索、替換String中特定字符和正則表達式的一切

    Java使用正則表達式檢索、替換String中特定字符和正則表達式的一切

    這篇文章主要給大家介紹了關(guān)于Java使用正則表達式檢索、替換String中特定字符和正則表達式的一切,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • JDK1.7的ConcurrentHashMap源碼解析

    JDK1.7的ConcurrentHashMap源碼解析

    這篇文章主要介紹了JDK1.7的ConcurrentHashMap源碼解析,HashMap是非線程安全的,而HashTable是線程安全的,但是HashTable實現(xiàn)同步的方法比較暴力,即在所有的方法體上添加synchronized關(guān)鍵字,需要的朋友可以參考下
    2023-12-12
  • Log4j日志記錄框架配置及用法解析

    Log4j日志記錄框架配置及用法解析

    這篇文章主要介紹了Log4j日志記錄框架配置及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論