網路上可以查到兩種方法去清除內容,一個是用 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
沒有留言:
張貼留言