java中String字串拼接“+”和StringBuffer的效率對比
阿新 • • 發佈:2018-11-17
1、前言
(1)最近在做資料傳輸時,由於接收的資料量較大,在字串拼接時使用了以前感覺方便的“+”進行字串拼接,最後拼接到最後時間越來越多,導致效率變慢。
2、String拼接
首先來看一下兩個String用“+”號拼接需要的時間
String aa="E0 00 00 00 00 06 10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49"; String bb="10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49"; long a1=System.currentTimeMillis(); for(int i=0;i<50000;i++){ aa=aa+","+bb; if(i%10000==0){ System.out.println(i+"____"+(System.currentTimeMillis()-a1)); } } System.out.println("____"+(System.currentTimeMillis()-a1));
所用時間:
10000____4567
20000____18949
30000____43707
40000____78677
大家可以看到越往後需要的時間越長,而我需要組合10萬條資料,基本上就相當於卡死了。
3、用StringBuffer來代替直接相加
String aa="E0 00 00 00 00 06 10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49"; String bb="10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49"; StringBuffer sb = new StringBuffer(aa); long a1=System.currentTimeMillis(); for(int i=0;i<50000;i++){ sb.append(",").append(bb); if(i%10000==0){ System.out.println(i+"____"+(System.currentTimeMillis()-a1)); } }
所花費的時間:
10000____5
20000____8
30000____14
40000____15
5、總結
看一看到用StringBuffer以後速度提升是非常明顯的。如果用String+的方式,每迴圈一次,就會重新new一個StringBuffer物件,這樣的記憶體消耗完全是不必要的,所以建議使用StringBuffer或者StringBuilder