java 清空StringBuilder、StringBuffer的三種方式及速度比較


情景展示

  在實際開發過程中,我們通常使用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的效率更高

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM