通过我们的项目,我们可以获得MAXIMUM可能的“速度”。将字符串多次拆分或将其存储在变量中并使用它会更快吗?
实施例
String example = "1,2,3,4";
System.out.println(example.split(",")[0]);
System.out.println(example.split(",")[1]);
System.out.println(example.split(",")[3]);
System.out.println(example.split(",")[4]);
或
String[] example = "1,2,3,4".split(",");
System.out.println(example[0]);
System.out.println(example[1]);
System.out.println(example[2]);
System.out.println(example[3]);
哪一个会在更短的时间内执行?
答案 0 :(得分:4)
一般来说,使用数组非常快并且解析字符串不是,所以只解析一次String然后使用数组会明显加快。
无论如何,这很容易测量,只需创建一个包含几千个元素的for,并尝试两个选项来查看差异。
答案 1 :(得分:1)
以下更快
String[] example = "1,2,3,4".split(",");
证明:
Time taken to run first method 10000 times: 640 ms
Time taken to run second method 10000 times: 531 ms
Time taken to run first method 100000 times: 4144 ms
Time taken to run second method 100000 times: 3763 ms
答案 2 :(得分:1)
将Reece的答案放到测试中,我使用了这段代码
long startTime, endTime;
int amountOfStrings=10000;
System.err.println("Generating "+amountOfStrings+" String(s)");
startTime=System.currentTimeMillis();
String example="";
for(int i=1; i<amountOfStrings-1; i++) {
example+=i+",";
}
example+=amountOfStrings;
endTime=System.currentTimeMillis();
System.err.println("Done in "+(endTime-startTime)+"ms");
System.err.println("Taking the multisplit-approach");
startTime=System.currentTimeMillis();
for(int i=0; i<amountOfStrings-1; i++) {
System.out.println(example.split(",")[i]);
}
endTime=System.currentTimeMillis();
System.err.println("Done in "+(endTime-startTime)+"ms");
System.err.println("Taking the onesplit-approach");
startTime=System.currentTimeMillis();
String[] data=example.split(",");
for(int i=0; i<amountOfStrings-1; i++) {
System.out.println(data[i]);
}
endTime=System.currentTimeMillis();
System.err.println("Done in "+(endTime-startTime)+"ms");
执行此命令:
$ java -jar ~/Desktop/Untitled.jar > ~/Desktop/Untitled.log
得到了这个输出:
Generating 10000 String(s)
Done in 292ms
Taking the multisplit-approach
Done in 3906ms
Taking the onesplit-approach
Done in 275ms
这清楚地表明,使用10,000个字符串,onesplit-approach(String[] data=example.split(",")
)比multisplit-approach(example.split(",")[i]
)快得多。
旁注:使用100个字符串是多分裂方法24ms和onesplit-approach 6ms,10 String多分裂1ms和onesplit 0ms。在使用更多数字时,我不希望多分裂方法更快。
快乐编码:) -Charlie