一、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 方法绝对不能用,时间和空间成本都很高。