做了个小测试,代码如下:
String s = "1 2 3 4 51 2 3 4 51 2 3 4";
int times = 1;
long stime = 0;
stime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
String[] split = StringUtils.split(s, " ");
}
System.out.println(System.currentTimeMillis() - stime);
stime = System.currentTimeMillis();
Pattern p = Pattern.compile(" ");
for (int i = 0; i < times; i++) {
String[] split = p.split(s);
}
System.out.println(System.currentTimeMillis() - stime);
对比得到数据如下:
times StringUtils.split string.split
1 6ms 0ms
10 9ms 1ms
100 10ms 5ms
1000 11ms 11ms
10000 19ms 31ms
100000 70ms 245ms
看着觉得很奇怪,为什么这个耗时不是线性增加的,而且在循环次数少的时候,jdk提供的split更快一些。完全搞不懂啊,求解释~