java字符串的5种拼接方式

一、java字符串拼接方式都有那些?

1.+号拼接

2.concat拼接耗时

3.join拼接

4.StringBuffer拼接

5.StringBuilder拼接

二、拼接的耗时如何?那种拼接效率高?

测试代码如下:

public class test4 {
    public static void main(String[] args) {
        String add = add();
        String concat = concat();
        String join = join();
        String buffer = buffer();
        String builder = builder();
    }


    public static String add() {
        String string = "";
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            string += "a";
        }
        long endTime = System.currentTimeMillis();
        System.out.println("+号拼接耗时:" + (endTime - startTime));
        return string;
    }

    public static String concat() {
        String string = "";
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            string = string.concat("a");
        }
        long endTime = System.currentTimeMillis();
        System.out.println("concat拼接耗时:" + (endTime - startTime));
        return string;
    }

    public static String join() {
        String string = "";
        long startTime = System.currentTimeMillis();
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 100000; i++) {
            list.add("a");
        }
        string = String.join(string, list);
        long endTime = System.currentTimeMillis();
        System.out.println("join拼接耗时:" + (endTime - startTime));
        return string;
    }

    public static String buffer() {
        StringBuffer sb = new StringBuffer();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            sb.append("a");
        }
        long endTime = System.currentTimeMillis();
        System.out.println("StringBuffer拼接耗时:" + (endTime - startTime));
        return sb.toString();
    }

    public static String builder() {
        StringBuilder sb = new StringBuilder();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            sb.append("a");
        }
        long endTime = System.currentTimeMillis();
        System.out.println("StringBuilder拼接耗时:" + (endTime - startTime));
        return sb.toString();
    }
}

结果如下:

+号拼接耗时:6501
concat拼接耗时:1739
join拼接耗时:13
StringBuffer拼接耗时:2
StringBuilder拼接耗时:1

以上可以看出+号拼接效率最慢,StringBuilder效率最高,但如果是多线程应用的话StringBuffer最优(StringBuffer是线程安全的,StringBuilder不是线程安全的)

注:执行一次字符串“+”,相当于 str = new StringBuilder(str).append("a").toString();所以效率低下,所以对大批量数据做处理时,加号“+” 和 contact 方法绝对不能用,时间和空间成本都很高。

发布了36 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/heidou_2016/article/details/103257127