使用Date对象计算出String和StringBuffer对象反复修改后的时间效率。

解决方案 »

  1.   

    设计2个基本相同的一系列修改操作程序块,一个用string来完成 一个用stringbuffer完成。用date在程序块开始前记录当前时间,结束后再记录当前时间,2个时间的差就是执行时间,比较下2个时间的耗时多少,哪个耗时少就比较有效率。
      

  2.   

    下面我简单写了一下比较的方法与测试,通过追加不同数量的A字符,去判断String跟StringBuffer所用时间大小,并且归集结果来比较public static void main(String[] args) {
    int minCount = 1000;//最小追加数量
    int maxCount = 2000;//最大追加数量
    List<Integer> equal = new ArrayList<Integer>(); //平等
    List<Integer> str = new ArrayList<Integer>();   //String效率高
    List<Integer> sb = new ArrayList<Integer>();    //StringBuffer效率高
    String append = "A";//追加字符
    int sum = 0;
    for (int i = minCount; i <= maxCount; i++) {
    if (calulateString(i, append) > calulateStringBuffer(i, append)) {
    sb.add(i);
    continue;
    } else if (calulateString(i, append) == calulateStringBuffer(i, append)) {
    equal.add(i);
    continue;
    } else if (calulateString(i, append) < calulateStringBuffer(i, append)) {
    str.add(i);
    continue;
    } else {
    //时间无法比较
    System.out.println(calulateString(i, append) + "-" + calulateStringBuffer(i, append));
    }
    }
    System.out.println(equal.size() + "相同效率:" + Collections.max(equal) + "--" + Collections.min(equal));
    System.out.println(equal);
    if (str.size() > 0) {
    System.out.println(str.size() + "String效率高:" + Collections.max(str) + "--" + Collections.min(str));
    System.out.println(str);
    }
    if (sb.size() > 0) {
    System.out.println(sb.size() + "StringBuffer效率高:" + Collections.max(sb) + "--" + Collections.min(sb));
    System.out.println(sb);
    }
    System.out.println(sum);
    }
    /*
     * 计算string时间
     */
    public static long calulateString(int size, String append) {
    String str = new String();
    long start = System.currentTimeMillis();
    for (int i = 0; i < size; i++) {
    str += append;
    }
    return System.currentTimeMillis() - start;
    }
    /*
     * 计算string时间
     */
    public static long calulateStringBuffer(int size, String append) {
    StringBuffer str = new StringBuffer();
    long start = System.currentTimeMillis();
    for (int i = 0; i < size; i++) {
    str.append(append);
    }
    return System.currentTimeMillis() - start;
    }得出结果如下

    1-0
    1-0
    1-0
    1-0
    1-0
    2-0

    61相同效率:1826--1017
    [1017, 1019, 1021,。]
    8String效率高:1936--1323
    [1323, 1355, 1367, 1390, 1399, 1444, 1730, 1936]
    612StringBuffer效率高:2000--1000
    [1000, 1001, 1003,。]
    0可以看到,StringBuffer效率高的数量更多。
      

  3.   

    在使用String对象时,每追加一次,会重新生成一个对象,在循环达到一定数量时还会造成内存溢出,但是使用StringBuffer就不会出现内存溢出的问题,而且效率比较高。