我相信有很多类似的问题,如果这太常见了,抱歉。我想了解哪一个更好/更快/节省空间等以及原因。
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/