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);
    }
}

 

展开阅读全文

没有更多推荐了,返回首页