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。