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:
每次字符串拼接都只是扩展内部char数组,只生产一个最终的string,所以这种效率最高
StringBuffer:
与StringBuilder相比只是多加了个synchronized,所以在单线程的情况下相差不大
StringUtils.join:
可以看到其内部还是用StringBuilder实现,但是每次循环都多了个分隔符的判断所以慢了一点,但是也不多,时间上来讲是一个数量级的
concat:
可以看出每次连接都会生成一个string,所以效率很低
+:
因为是重载的运算符,找不到源码,但是从结果来看效率最低
来源:https://www.jianshu.com/p/c49c0f6f3b75
0
投稿
猜你喜欢
- 1. 基本概念的理解`绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL、物理路径例如:c:/xyz/test.txt代表了te
- 【题目】 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中
- 1.Lombok是什么Lombok是使用java编写的一款开源类库。其主作用是使用注解来代替一些具有格式固定,没有过多技术含量的编码工作。使
- 在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解。所以现在来总结Java异
- 一、IO流的分类字符流ReaderInputStreamReader(节点流)BufferedReader(处理流)WriterOutput
- 首先给出一段代码:public class AslistMethod { public static void main(String[]
- 本文实例讲述了Java实现的不同图片居中剪裁生成同一尺寸缩略图功能。分享给大家供大家参考,具体如下:因为业务需要,写了这样一个简单类,希望能
- 这篇文章主要介绍了Java并发编程预防死锁过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 项目开发中,经常会遇到定时任务的场景,Spring提供了@Scheduled注解,方便进行定时任务的开发概述要使用@Scheduled注解,
- 本文实例讲述了Java编程调用微信接口实现图文信息等推送功能。分享给大家供大家参考,具体如下:Java调用微信接口工具类,包含素材上传、获取
- 在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁。S
- Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制
- paras.xml文件<?xml version="1.0" encoding="UTF-8"
- package list;import java.util.ArrayList;/** * Java约瑟夫问题: n个人(不同id
- Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion)。,它的语法形式有如下所示的两种
- 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据比如json数据如下:{responseHeader:{status:0
- 前言面向切面(AOP)Aspect Oriented Programming是一种编程范式,与语言无关,是一种程序设计思想,它也是sprin
- 前言最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大
- Maven打包没有指定主类在使用IDEA开发项目的时候经常会遇到使用Maven打包项目(打成jar包或者zip包),但是之前不太清楚打包插件
- 1.强引用( Strong Reference )最普遍的引用:Object obj=new Object()抛出OutOfMemoryEr