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

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

前言

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

示例代码


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

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

猜你喜欢

  • hadoop实现grep示例分享

    2023-12-24 05:31:04
  • java 动态增加定时任务示例

    2023-07-29 06:56:00
  • 在Spring中编写事务的介绍

    2021-12-15 10:33:18
  • Java计算文本MD5加密值的方法示例

    2023-11-15 13:18:48
  • Spring Security 控制授权的方法

    2023-08-06 19:21:08
  • Java构造代码块,静态代码块原理与用法实例分析

    2023-11-03 09:03:45
  • Java Comparable及Comparator接口区别详解

    2023-07-03 08:19:50
  • 简单实现安卓里百度地图持续定位

    2023-07-29 07:59:22
  • 深入理解Java中的接口

    2023-11-08 23:52:43
  • Java 反射机制实例详解

    2023-11-28 03:49:47
  • 关于Springboot数据库配置文件明文密码加密解密的问题

    2023-11-25 03:29:46
  • java中form以post、get方式提交数据中文乱码问题总结

    2022-12-15 06:53:59
  • Java 如何将网络资源url转化为File文件

    2023-05-28 09:23:37
  • SpringBoot统一响应格式及统一异常处理

    2022-08-30 08:03:08
  • Java中线程的等待与唤醒_动力节点Java学院整理

    2023-07-17 04:03:05
  • Idea中maven项目实现登录验证码功能

    2023-11-29 16:50:51
  • Java异常处理机制try catch流程详解

    2022-09-23 08:51:09
  • Java 实战范例之线上婚纱摄影预定系统的实现

    2021-08-08 14:19:42
  • Java Socket通信之聊天室功能

    2022-02-04 11:47:35
  • Java_异常类(错误和异常,两者的区别介绍)

    2023-09-19 08:53:27
  • asp之家 软件编程 m.aspxhome.com