StringBuilder的四种清空方式及其效率比较
在平时的开发中,StringBuilder用的还是比较常见的,主要是用于优化String字符串的拼接操作。这里介绍一下StringBuilder常见的清空方式:
- 使用new关键字重新生成一个StringBuilder对象;
- 使用StringBuilder的delete方法;
- 使用StringBuilder的setLength方法;
- 使用StringBuilder的replace方法。
接下来分别测试上述4个方法,查看一下效率:
- 测试new新建对象:
@Test public void newTest() { int forCount = 100000000; StringBuilder sb = new StringBuilder(); long startTime = System.currentTimeMillis(); for (int i = 0; i < forCount; i++) { sb.append("1111"); sb.append("2222"); sb.append("3333"); sb.append("4444"); // 新建对象 sb = new StringBuilder(); } System.out.println("newTest()耗时:" + (System.currentTimeMillis() - startTime)); }
运行结果:
newTest()耗时:2250
- 测试delete方法:
@Test
public void deleteTest() {
int forCount = 100000000;
StringBuilder sb = new StringBuilder();
long startTime = System.currentTimeMillis();
for (int i = 0; i < forCount; i++) {
sb.append("1111");
sb.append("2222");
sb.append("3333");
sb.append("4444");
// 使用delete方法清空
sb.delete(0, sb.length());
}
System.out.println("deleteTest()耗时:" + (System.currentTimeMillis() - startTime));
}
运行结果:
deleteTest()耗时:1780
- 测试setLength方法:
@Test
public void setLengthTest() {
int forCount = 100000000;
StringBuilder sb = new StringBuilder();
long startTime = System.currentTimeMillis();
for (int i = 0; i < forCount; i++) {
sb.append("1111");
sb.append("2222");
sb.append("3333");
sb.append("4444");
// 使用setLength方法清空
sb.setLength(0);
}
System.out.println("setLengthTest()耗时:" + (System.currentTimeMillis() - startTime));
}
运行结果:
setLengthTest()耗时:1751
- 测试replace方法:
@Test
public void replaceTest() {
int forCount = 100000000;
StringBuilder sb = new StringBuilder();
long startTime = System.currentTimeMillis();
for (int i = 0; i < forCount; i++) {
sb.append("1111");
sb.append("2222");
sb.append("3333");
sb.append("4444");
// 使用replace方法清空
sb.replace(0, sb.length(), "");
}
System.out.println("replaceTest()耗时:" + (System.currentTimeMillis() - startTime));
}
运行结果:
replaceTest()耗时:1776
由结果可知,上述四种方法中,使用new关键字循环创建对象效率最低,其他三种方法耗时相近,可择优选择使用。
一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。