網路上可以查到兩種方法去清除內容,一個是用 delete(),另一個則是 setLength()
官方文件中似乎沒有提到哪種比較好
根據 [1] 的討論,應該是 setLength() 效率會比 delete() 稍高。
以下是我的測試方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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)); |
測試結果
1 2 3 4 |
StringBuilder: Takes time for delete:987 StringBuilder: Takes time for setLength:766 |
測試結果的確是用 setLength() 稍微快一些,而兩種方法都可以確實刪除 StringBuilder 的內容。
參考資料:
1、Java performance of StringBuilder in a loop
沒有留言:
張貼留言