Java 字符串拼接方式
2024-10-09 16:53:44
import java.util.ArrayList;
import java.util.List; import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class TestString { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Test
public void testPlus() {
String s = "";
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
s = s + String.valueOf(i);
}
long te = System.currentTimeMillis();
logger.info("+ cost {} ms", te - ts);
} @Test
public void testConcat() {
String s = "";
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
s = s.concat(String.valueOf(i));
}
long te = System.currentTimeMillis();
logger.info("concat cost {} ms", te - ts);
} @Test
public void testJoin() {
List<String> list = new ArrayList<String>();
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
list.add(String.valueOf(i));
}
StringUtils.join(list, "");
long te = System.currentTimeMillis();
logger.info("StringUtils.join cost {} ms", te - ts);
} @Test
public void testStringBuffer() {
StringBuffer sb = new StringBuffer();
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
sb.append(String.valueOf(i));
}
sb.toString();
long te = System.currentTimeMillis();
logger.info("StringBuffer cost {} ms", te - ts);
} @Test
public void testStringBuilder() {
StringBuilder sb = new StringBuilder();
long ts = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
sb.append(String.valueOf(i));
}
sb.toString();
long te = System.currentTimeMillis();
logger.info("StringBuilder cost {} ms", te - ts);
}
}
运行结果如下:
11:00:22,359 INFO TestString:23 - + cost 1828 ms
11:00:22,921 INFO TestString:34 - concat cost 562 ms
11:00:22,937 INFO TestString:46 - StringUtils.join cost 16 ms
11:00:22,968 INFO TestString:58 - StringBuffer cost 31 ms
11:00:23,031 INFO TestString:70 - StringBuilder cost 63 ms
要特别注意的是:
StringBuilder 循环的次数是其它的10倍,如果是一样,那么返回 0,可见StringBuilder 的速度之快。
总结:
用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。
Join 和 StringBuffer,相差不大,Join方式要快些,可见这种JavaScript中快速拼接字符串的方式在Java中也非常适用。
StringBuilder 的速度最快,但其有线程安全的问题,而且只有JDK5支持。
基于使用StringUtils.join需导入第三方包,使用StringBuilder可能有线程安全的问题,实际使用的,我一般首选StringBuffer
最新文章
- 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
- PHP基础知识之对象复制
- C#实现控制Windows系统关机、重启和注销的方法:
- android超快模拟器Ggenymotion的安装和配置
- 解决ORA-00824: cannot set sga_target due to existing
- log的简单说明
- jquery设置元素的readonly与diabled属性方法
- 20145317彭垚《Java程序设计》第3周学习总结
- A Mathematical Curiosity 分类: HDU 2015-06-25 21:27 11人阅读 评论(0) 收藏
- PHP 正则表达式语法
- java url中文 编译和解码
- 问题:关于一个贴友的js留言板的实现
- HW4.13
- Java开发中文件读取方式总结
- Delphi 进阶基础技能说明
- 网站开启cdn加速的最简单步骤
- python学习笔记(十)、文件操作
- orcal - 增删改
- SpringBoot系列: Json的序列化和反序列化
- python - class类 (二) 静态属性/类方法/静态方法