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:
每次字符串拼接都只是扩展内部char数组,只生产一个最终的string,所以这种效率最高
StringBuffer:
与StringBuilder相比只是多加了个synchronized,所以在单线程的情况下相差不大
StringUtils.join:
可以看到其内部还是用StringBuilder实现,但是每次循环都多了个分隔符的判断所以慢了一点,但是也不多,时间上来讲是一个数量级的
concat:
可以看出每次连接都会生成一个string,所以效率很低
+:
因为是重载的运算符,找不到源码,但是从结果来看效率最低
来源:https://www.jianshu.com/p/c49c0f6f3b75
标签:java,字符串拼接,效率
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
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
![](https://img.aspxhome.com/file/2023/4/58024_0s.png)
Java构造代码块,静态代码块原理与用法实例分析
2023-11-03 09:03:45
![](https://img.aspxhome.com/file/2023/7/58707_0s.png)
Java Comparable及Comparator接口区别详解
2023-07-03 08:19:50
![](https://img.aspxhome.com/file/2023/5/57425_0s.png)
简单实现安卓里百度地图持续定位
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
![](https://img.aspxhome.com/file/2023/7/63497_0s.png)
Java 如何将网络资源url转化为File文件
2023-05-28 09:23:37
SpringBoot统一响应格式及统一异常处理
2022-08-30 08:03:08
![](https://img.aspxhome.com/file/2023/5/63155_0s.png)
Java中线程的等待与唤醒_动力节点Java学院整理
2023-07-17 04:03:05
![](https://img.aspxhome.com/file/2023/4/57694_0s.png)
Idea中maven项目实现登录验证码功能
2023-11-29 16:50:51
![](https://img.aspxhome.com/file/2023/5/60575_0s.png)
Java异常处理机制try catch流程详解
2022-09-23 08:51:09
![](https://img.aspxhome.com/file/2023/4/62404_0s.png)
Java 实战范例之线上婚纱摄影预定系统的实现
2021-08-08 14:19:42
![](https://img.aspxhome.com/file/2023/4/61384_0s.png)
Java Socket通信之聊天室功能
2022-02-04 11:47:35
![](https://img.aspxhome.com/file/2023/3/61283_0s.jpg)
Java_异常类(错误和异常,两者的区别介绍)
2023-09-19 08:53:27
![](https://img.aspxhome.com/file/2023/1/58311_0s.jpg)