目录
一、字符串拼接优化
字符串三种拼接方式性能对比
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 |