情景展示
在實際開發過程中,我們通常使用StringBuilder或StringBuffer來完成字符串的拼接工作,有時需要進行數據清空操作。
清空StringBuilder或StringBuffer有哪些方式能夠實現?哪種方式最快?
StringBuilder sb = new StringBuilder();
sb.append("君不見黃河之水天上來");
方式一:調用setLength()
sb.setLength(0);
方式二:調用delete() 推薦使用
sb.delete(0,sb.length());
方式三:創建新對象
創建新對象,舊對象由java垃圾回收機制自動處理
sb = new StringBuilder();
速度對比
測試1:
// 循環次數:一千萬次
final int loopTimes = 10000000;
StringBuilder sb = new StringBuilder();
long begin = System.currentTimeMillis();
// 第3種方式
for (int i = 0; i < loopTimes; i++) {
// 清空
sb = new StringBuilder();
// append的字符串要都不相同,杜絕java字符串常量池的影響
sb.append(UniqueUtils.generateGuid());// 唯一值
}
System.out.println("new對象所耗時間:" + (System.currentTimeMillis() - begin));
begin = System.currentTimeMillis();
// 第2種方式
for (int i = 0; i < loopTimes; i++) {
// 清空
sb.delete(0, sb.length());
sb.append(UniqueUtils.generateGuid());// 唯一值
}
System.out.println("delete所耗時間:" + (System.currentTimeMillis() - begin));
begin = System.currentTimeMillis();
// 第1種方式
for (int i = 0; i < loopTimes; i++) {
// 清空
sb.setLength(0);
sb.append(UniqueUtils.generateGuid());// 唯一值
}
System.out.println("setLength所耗時間:" + (System.currentTimeMillis() - begin));

測試2:
為了進一步驗證delete和setLength哪個更快,我二者的執行先后順序進行了調換
// 循環次數:一千萬次
final int loopTimes = 10000000;
StringBuilder sb = new StringBuilder();
log.debug("方式三開始運行。。。");
long begin = System.currentTimeMillis();
// 第3種方式
for (int i = 0; i < loopTimes; i++) {
// 清空
sb = new StringBuilder();
// append的字符串要都不相同,杜絕java字符串常量池的影響
sb.append(UniqueUtils.generateGuid());// 唯一值
}
System.out.println("new對象所耗時間:" + (System.currentTimeMillis() - begin));
log.debug("方式一開始運行。。。");
begin = System.currentTimeMillis();
// 第1種方式
for (int i = 0; i < loopTimes; i++) {
// 清空
sb.setLength(0);
sb.append(UniqueUtils.generateGuid());// 唯一值
}
System.out.println("setLength所耗時間:" + (System.currentTimeMillis() - begin));
log.debug("方式二開始運行。。。");
begin = System.currentTimeMillis();
// 第2種方式
for (int i = 0; i < loopTimes; i++) {
// 清空
sb.delete(0, sb.length());
sb.append(UniqueUtils.generateGuid());// 唯一值
}
System.out.println("delete所耗時間:" + (System.currentTimeMillis() - begin));

實驗結果證明:
delete也就是方式二的執行速度更快。
StringBuffer與StringBuilder清空的方法一致,也是delete的效率更高

