2012年8月24日 星期五

清除 StringBuilder 的內容

在 Java 的 StringBuilder 中,並沒有提供 clear() 之類的方法可以清除內容
網路上可以查到兩種方法去清除內容,一個是用 delete(),另一個則是 setLength()
官方文件中似乎沒有提到哪種比較好
根據 [1] 的討論,應該是 setLength() 效率會比 delete() 稍高。

以下是我的測試方法:
int count = 10000000;
StringBuilder sb = new StringBuilder();
long start1 = Calendar.getInstance().getTimeInMillis();
for(int i=0 ; i<count ; i++) {
  sb.append("qweqrqerwfsdvsxdvxsdv");
  sb.delete(0, sb.length());
}
long end1 = Calendar.getInstance().getTimeInMillis();
System.out.println("StringBuilder: " + sb.toString());
System.out.println("Takes time for delete:" + (end1-start1));

long start2 = Calendar.getInstance().getTimeInMillis();
for(int i=0 ; i<count ; i++) {
  sb.append("qweqrqerwfsdvsxdvxsdv");
  sb.setLength(0);
}
long end2 = Calendar.getInstance().getTimeInMillis();
System.out.println("StringBuilder: " + sb.toString());
System.out.println("Takes time for setLength:" + (end2-start2));

測試結果
StringBuilder: 
Takes time for delete:987
StringBuilder: 
Takes time for setLength:766

測試結果的確是用 setLength() 稍微快一些,而兩種方法都可以確實刪除 StringBuilder 的內容。

參考資料:
1、Java performance of StringBuilder in a loop

沒有留言: