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