Clearing a string buffer/builder after loop

后端 未结 8 1898
萌比男神i
萌比男神i 2020-12-12 16:39

How do you clear the string buffer in Java after a loop so the next iteration uses a clear string buffer?

8条回答
  •  渐次进展
    2020-12-12 17:13

    Already good answer there. Just add a benchmark result for StringBuffer and StringBuild performance difference use new instance in loop or use setLength(0) in loop.

    The summary is: In a large loop

    • StringBuilder is much faster than StringBuffer
    • Create new StringBuilder instance in loop have no difference with setLength(0). (setLength(0) have very very very tiny advantage than create new instance.)
    • StringBuffer is slower than StringBuilder by create new instance in loop
    • setLength(0) of StringBuffer is extremely slower than create new instance in loop.

    Very simple benchmark (I just manually changed the code and do different test ):

    public class StringBuilderSpeed {
    public static final char ch[] = new char[]{'a','b','c','d','e','f','g','h','i'};
    
    public static void main(String a[]){
        int loopTime = 99999999;
        long startTime = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for(int i = 0 ; i < loopTime; i++){
            for(char c : ch){
                sb.append(c);
            }
            sb.setLength(0);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Time cost: " + (endTime - startTime));
    }
    

    }

    New StringBuilder instance in loop: Time cost: 3693, 3862, 3624, 3742

    StringBuilder setLength: Time cost: 3465, 3421, 3557, 3408

    New StringBuffer instance in loop: Time cost: 8327, 8324, 8284

    StringBuffer setLength Time cost: 22878, 23017, 22894

    Again StringBuilder setLength to ensure not my labtop got some issue to use such long for StringBuffer setLength :-) Time cost: 3448

提交回复
热议问题