java-API之StringBuilder类型

Posted 技术狂-CYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-API之StringBuilder类型相关的知识,希望对你有一定的参考价值。

StringBuilder创建对象

// StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuilder sb = new StringBuilder();

常用方法

在 StringBuilder 上的主要操作是 append 和 insert 方法。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

StringBuilder sb = new StringBuilder();
System.out.println(  sb.append("app") ); 
System.out.println(  sb.append("le") ); // apple

StringBuilder sb2 = new StringBuilder();
sb2.append("le"); 
System.out.println(  sb.insert(0,"app") );  // apple

字符串拼接效率问题及解决方法

我们都知道字符串可以通过“+”进行连接,但是这种方式方式效率如何,下面让我们测试下:

    public class Test_StringBuilder {
    public static void main(String[] args) {
        StringConcat();// + 拼接字符串,拼接10000次
    }
        /*
     * 将字符串通过 + 连接 10000次
     * 通过运行之间判断效率如何?
     */
    public static void StringConcat() {
//      定义字符串
        String str = "abcdefghijklmnopqrstuvwxyz";
        String result = "";

        
        long start = System.currentTimeMillis(); //计时开始ms
//      拼接字符串
        for (int i = 0; i < 10000; i++) {
            result += str;
        }       
        long end = System.currentTimeMillis(); // 计时结束ms
//      打印拼接结果
        System.out.println(end-start);  //3248ms => 3.2s
    }

}

通过上述代码的运行,可以看到,运行之间需要3秒多,这效率确实有点低,但是到底有多低呢?我们再在测试StringBuilder比较下。在Test_StringBuilder类中添加如下方法

    public static void StringBuilderConcat() {
    String str = "abcdefghijklmnopqrstuvwxyz";
    StringBuilder sb = new StringBuilder();
        
    long start = System.currentTimeMillis(); //计时开始ms
    for (int i = 0; i < 10000; i++) {
        sb.append(str);
    }
    long end = System.currentTimeMillis(); // 计时结束ms
    System.out.println(end-start);  // 3ms
    }

在main方法中进行调用该方法:

StringBuilderConcat(); // StringBuilder连接字符串,连接10000次

通过上述此时,我们可以得出StringBuider的测试结果为3ms,当然每台电脑的运行结果可能都不一定相同,但是通过对比我们就真实体会到StringBuilder拼接字符的效率比String要高好几千倍,真实没有对比就没有伤害啊。
相比大家都知道了,我们工作时,需要字符串拼接,还是使用StringBuilder,因为它更高效。可能还有的小伙伴会说,StringBuffer呢?下面我们看下手册说明:
该类(StringBuilder)被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
其实,StringBuilder和StringBuffer没有太大的差距,只是他们的“出生日期不同”,StringBuffer是JDK1.0出来的,而StringBuilder是JDK 1.5出来的,既然StringBuilder是StringBuffer的一个替换,相比官网肯定有做了些优化,官网也推荐我们使用StringBuilder,那我们只好恭敬不如从命了——使用StringBuilder。

以上是关于java-API之StringBuilder类型的主要内容,如果未能解决你的问题,请参考以下文章

String StringBuilder StringBuffer 的区别? 什么情况下用“+”运算符进行字符串连接比调用 StringBuffer/StringBuilder对象的 append(代

Java之字符串String,StringBuffer,StringBuilder

字符串之StringBuffer 与 StringBuilder的对比

java算法易筋经:常见java-API使用技巧

java算法易筋经:常见java-API使用技巧

Java学习笔记之StringStringBuffer和StringBuilder