JAVA中String替換效能簡單測試
Java中的String的實現比較特殊,而String又在應用開始中佔據了很大的比重。很多人認為String的效能比較差,用多了會有問題。那麼String的效能倒底如何呢,是否用多了就有問題了呢?下面對String的替換做一簡單測試,來看看測試結果吧。
1. 替換測試;
把“下載谷歌拼音輸入法”中的“谷歌”替換成“<a href='http://www.google.com' target='_blank'>谷歌</a>”。
測試100萬次,結果如下,大概每秒處理61萬次替換。
Time used:1127
0 0
10000 625000
20000 625000
30000 638297
40000 615384
50000 625000
60000 631578
70000 630630
80000 640000
90000 642857
100000 645161
110000 650887
120000 648648
130000 650000
140000 642201
150000 635593
160000 625000
170000 615942
180000 604026
190000 593750
200000 595238
210000 598290
220000 602739
230000 605263
240000 607594
250000 608272
260000 610328
270000 612244
280000 614035
290000 615711
300000 617283
310000 620000
320000 620155
330000 620300
340000 622710
350000 623885
360000 623916
370000 625000
380000 626029
390000 628019
400000 628930
410000 629800
420000 630630
430000 631424
440000 631276
450000 632022
460000 632737
470000 633423
480000 634081
490000 635538
500000 628140
510000 627306
520000 628019
530000 619158
540000 619977
550000 607734
560000 608034
570000 608974
580000 603537
590000 603889
600000 598205
610000 598039
620000 598455
630000 599429
640000 589318
650000 590372
660000 591928
670000 592396
680000 593886
690000 594827
700000 595744
710000 596137
720000 597510
730000 598360
740000 599190
750000 600000
760000 600790
770000 600624
780000 601387
790000 602134
800000 603318
810000 603576
820000 604274
830000 604956
840000 605623
850000 606276
860000 607344
870000 607541
880000 608154
890000 608755
900000 609343
910000 609919
920000 610484
930000 611038
940000 611979
950000 612508
960000 612635
970000 613147
980000 613650
990000 614143
Time used:1625
2. Index測試;
從“下載谷歌拼音輸入法”中定位 {'谷','拼'};每次定位兩個漢字。
測試100萬次,結果如下,大概每秒處理近100萬,應該是198萬次定位。
0 0
10000 909090
20000 1000000
30000 1034482
40000 975609
50000 961538
60000 952380
70000 945945
80000 963855
90000 957446
100000 952380
110000 964912
120000 975609
130000 992366
140000 985915
150000 974025
160000 958083
170000 965909
180000 972972
190000 974358
200000 975609
210000 981308
220000 986547
230000 991379
240000 995850
250000 988142
260000 977443
270000 978260
280000 982456
290000 986394
300000 990099
310000 987261
320000 978593
330000 979228
340000 979827
350000 983146
360000 983606
370000 989304
380000 989583
390000 992366
400000 995024
410000 997566
420000 995260
430000 995370
440000 995475
450000 997782
460000 1000000
470000 1002132
480000 1004184
490000 1006160
500000 1006036
510000 1009900
520000 1011673
530000 996240
540000 996309
550000 998185
560000 998217
570000 998248
580000 1000000
590000 971993
600000 974025
610000 974440
620000 970266
630000 967741
640000 968229
650000 970149
660000 972017
670000 973837
680000 974212
690000 975954
700000 977653
710000 977961
720000 976933
730000 973333
740000 973684
750000 975292
760000 975609
770000 977157
780000 978670
790000 977722
800000 980392
810000 981818
820000 983213
830000 981087
840000 980163
850000 978135
860000 978384
870000 979729
880000 981047
890000 979097
900000 977198
910000 978494
920000 979765
930000 979978
940000 981210
950000 982419
960000 984615
970000 984771
980000 984924
990000 986055
Time used:1014
從測試結果看,String的indexOf定位和替換效能相當不錯。
附件程式碼:
package com.ulearn.xpe.tools.test;
public class StringTest {
public static String replace(String content, String src, String tag) {
StringBuilder sb = new StringBuilder(content);
int p = sb.indexOf(src);
if (p >= 0) {
sb.replace(p, p + src.length(), tag);
}
return sb.toString();
}
public static void replacePerformance(int max) {
String content="下載谷歌拼音輸入法";
String src = "谷歌";
String tag = "<a href='http://www.google.com' target='_blank'>谷歌</a>";
long startTime = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
replace(content,src,tag);
long nowTime = System.currentTimeMillis();
if (i % 10000 == 0) {
System.out.println("/t" + i + "/t" + i * 1000/ (nowTime - startTime+1));
}
}
long endTime = System.currentTimeMillis();
System.out.println("Time used:"+(endTime-startTime));
}
public static void indexPerformance(int max){
String content="下載谷歌拼音輸入法";
char[] jk = {'谷','拼'};
long startTime = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
for(int j=0;j<jk.length;j++){
content.indexOf(jk[j]);
}
long nowTime = System.currentTimeMillis();
if (i % 10000 == 0) {
System.out.println("/t" + i + "/t" + i * 1000/ (nowTime - startTime+1));
}
}
long endTime = System.currentTimeMillis();
System.out.println("Time used:"+(endTime-startTime));
}
public static void main(String[] args) {
replacePerformance(1000000);
indexPerformance(1000000);
replacePerformance(1000000);
indexPerformance(1000000);
}
}