Java字符串拆分成数组,我应该存储在变量中吗?

时间:2014-11-17 17:25:45

标签: java arrays string optimization split

通过我们的项目,我们可以获得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]);

哪一个会在更短的时间内执行?

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