# 程序优化

# 一、字符串处理优化

# 1.1 字符串分割

方式一:用 String 提供的 split() 方法










 


// 模拟数据
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 100000000; i++) {
    builder.append(i).append(";");
}
String data = builder.toString();

//  拆分数据
long start = System.currentTimeMillis();
data.split(";");
System.out.println(System.currentTimeMillis() - start);
1
2
3
4
5
6
7
8
9
10
11

花费时间时间 6032ms

方式二:采用字符串分割的工具类 StringTokenizer。










 
 
 
 


// 模拟数据
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 100000000; i++) {
    builder.append(i).append(";");
}
String data = builder.toString();

// 拆分数据
long start = System.currentTimeMillis();
StringTokenizer st = new StringTokenizer(data, ";");
while (st.hasMoreTokens()) {
    String str = st.nextToken();
}
System.out.println(System.currentTimeMillis() - start);
1
2
3
4
5
6
7
8
9
10
11
12
13
14

采用 StringTokenizer 完成 split() 同样的数据分割,花费大约 2965 毫秒。

从运行效果, StringTokenizer 其效率高于 split() 方法。所以,在能够使用 StringTokenizer 进行处理的地方,就尽量使用 StringTokenizer 进行字符串分割处理。

# 1.2 字符串拼接

方式一:使用 + 号拼接字符串。


 
 
 
 



long start = System.currentTimeMillis();
String str="";
for(int i=0;i<100000;i++){
    str=str + "胖哥带你入坑带你飞";
}
System.out.println(str);
System.out.println(System.currentTimeMillis()-start);
1
2
3
4
5
6
7

程序运行花费7300毫秒

方式二:使用StringBuilder进行字符串拼接


 
 
 




long start = System.currentTimeMillis();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    builder.append("胖哥带你入坑带你飞");
}
System.out.println(builder.toString());
System.out.println(System.currentTimeMillis() - start);
1
2
3
4
5
6
7

程序运行花费13毫秒

很显然,使用 + 号拼接字符串,其效率明显较低,采用 StringBuilder 来完成字符串连接性能相对较好,同理,如果需要考虑线程安全的情况下,可以选择 StringBuffer。

更新时间: 6/18/2020, 2:27:24 PM