java字符串优化

目录

一、字符串拼接优化

二、字符串分割


一、字符串拼接优化

字符串三种拼接方式性能对比

1、使用+号

2、使用StringBuffer

3、使用StringBuilder

public  static void joinOpt(int j) {
        long start0 = System.nanoTime();
        String str = "";
        for (int i = 0; i< j; ++ i){
            str += "a";
        }
        long end0 = System.nanoTime();
        System.out.println("String+连接" + j + "个字符串共耗时" + (end0 - start0) + "纳秒");

        long start1 = System.nanoTime();
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i< j; ++ i){
            stringBuffer.append("a");
        }
        long end1 = System.nanoTime();
        System.out.println("StringBuffer连接" + j + "个字符串共耗时" + (end1 - start1) + "纳秒");

        long start2 = System.nanoTime();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i< j; ++ i){
            stringBuilder.append("a");
        }
        long end2 = System.nanoTime();
        System.out.println("StringBuilder连接" + j + "个字符串共耗时" + (end2 - start2) + "纳秒");
        String a = "a" + 3 + "b";
        String b = "a3b";
        System.out.println(a == b); //true
    }

从结果可以知道+效率是最差的, 因为String类型是不可变得,+连接字符串会不断的创建字符串。StringBuffer内部是方法同步的,因此次之。StringBuilder是最快的,单线程情况下可以优先考虑使用。a==b//true这种情况字符串在编译时期已经进行了优化,常量池中只存在“a3b”

单位/纳秒 10 50 100
+

 51835

208749 285972
StringBuffer

 40904

284209 58534
StringBuilder

 3174

4937 23273

二、字符串分割

1、使用原生JDK的split方法

2、使用StringTokenizer类

public static void splitOpt(int j) {
        String str = getStr(j);

        long start0 = System.nanoTime();
        String[] str1 = str.split("\\.");
        long end0 = System.nanoTime();
        System.out.println("split分割" + j + "个字符串使用时间为" + (end0 - start0) + "纳秒");

        long start1 = System.nanoTime();
        StringTokenizer stringTokenizer = new StringTokenizer(str, "\\.");
        long end1 = System.nanoTime();
        System.out.println("StringTokenizer分割" + j + "个字符串使用时间为" + (end1 - start1) + "纳秒");
    }

    public static String getStr(int j) {
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < j; i++) {
            sb.append(UUID.randomUUID().toString().replaceAll("-", ""));
            sb.append(".");
        }
        return sb.toString();
    }

从结果可以知道StringTokenizer分割性能稳定,时间较短,使用StringTokenizer是不错的选择

单位/纳秒 10 20 50 100
split 30125 46193 58887 100143
StringTokenizer 40199 38788 37025 32088

猜你喜欢

转载自blog.csdn.net/qq_34677946/article/details/81612867