速度比较两个代码

时间:2015-02-18 07:41:59

标签: java performance pass-by-value

我相信有很多类似的问题,对不起,如果这太常见了。我想知道哪一个更好/更快/节省空间等等,以及为什么。

public static void(String[] main){
    //case 1
    String[] str_arr = new String[n];
    method1(str_arr)

    //case 2
    String[] str_arr = new String[n];
    String[] arr = new String[n];
    for(int i=0; i < n; i++){
        arr[i] = str_arr[i].split("some_char")[2];
    }
    method2(arr);
}

void method1(String[] str_arr){
    String[] arr = new String[n];
    for(int i=0; i < n; i++){
        arr[i] = str_arr[i].split("aChar")[2];//assume there are 50 of aChar 
    }
//  do_something with arr ;
}

void method2(String[] arr){
//  do_something with arr ;
}

我更喜欢哪一个?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这完全取决于您的判断。

说到性能原因:

  • 尽可能使用增强型for循环,因为它们有时会影响循环性能(请参阅此处的一个不错的微基准:Java Enhanced-For-Loop FASTER than traditional?),或者......
  • 如果您不再需要原件,请不要创建其他存储阵列。只需读取值,split()并将其存储回来。在非常大的数组上,您将节省一些分配时间和空间。
  • 在此特定示例中,方法调用的实际成本可以忽略不计。如果你是特别偏执(不推荐)你可以使方法静态,以防止它成为这个调用功能。

干净整洁的代码:

  • 你的方法看起来可能是通用的,所以它是一个很好的候选者,只需要一个带有数组的方法,以及分隔符,并拆分它的所有元素。
  • main()代码建议尽可能小巧紧凑。

TL; DR转到第一个选项,最后进行一些修改。

此外,在将元素实际放入数组之前拆分元素可能是个好主意。