java - 两种代码速度对比

标签 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 ;
}

我应该选择哪一个?

提前致谢。

最佳答案

这完全取决于您的判断。

说到性能原因:

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

就干净整洁的代码而言:

  • 您的方法看起来可能是通用的,因此它非常适合仅接受数组和分隔符并拆分其所有元素的方法。
  • 为方便起见,建议 main() 代码尽可能小且紧凑。

TL;DR 选择第一个选项,并最终进行一些修改。

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

关于java - 两种代码速度对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578444/

相关文章:

java - Elasticsearch 中自定义分词器的正则表达式

java - 是否在方法内部将 boolean 值分配给局部变量?

java - Swing GUI 卡住

c++ - 为什么函数中的指针值与作为参数传入的指针值不同?

c++ - 带按值传递参数的 std::forward

kernel - 使用按值传递的概念从 opencl 内核调用函数

java - 使用 JUnit 理论测试采用 String 参数的方法

javascript - iPad 上的 Webkit 动画性能

algorithm - Python Codility Frog River 一次复杂度

android - 每个按钮的有效性、Android 开关或点击监听器