软件编程
位置:首页>> 软件编程>> java编程>> java中拼接字符串的5种方法效率对比

java中拼接字符串的5种方法效率对比

作者:justlinzhihe  发布时间:2022-01-08 05:46:18 

标签:java,字符串拼接,效率

前言

最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,所以下面就来测试下面,话不多说了,来一起看看详细的介绍吧。

示例代码


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:

java中拼接字符串的5种方法效率对比

每次字符串拼接都只是扩展内部char数组,只生产一个最终的string,所以这种效率最高

StringBuffer:

java中拼接字符串的5种方法效率对比

与StringBuilder相比只是多加了个synchronized,所以在单线程的情况下相差不大

StringUtils.join:

java中拼接字符串的5种方法效率对比

java中拼接字符串的5种方法效率对比

可以看到其内部还是用StringBuilder实现,但是每次循环都多了个分隔符的判断所以慢了一点,但是也不多,时间上来讲是一个数量级的

concat:

java中拼接字符串的5种方法效率对比

可以看出每次连接都会生成一个string,所以效率很低

+:

因为是重载的运算符,找不到源码,但是从结果来看效率最低

来源:https://www.jianshu.com/p/c49c0f6f3b75

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com