考虑到Java在传递值时不起作用。将以下哪一项视为将新数组值分配给现有数组的最常规/正确方法:
1:
int[] x = {1,2};
public static int[] changeValue(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]*=2;
}
return arr;
}
changeValue(x);
2:
int[] x = {1,2};
public static int[] changeValue(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]*=2;
}
return arr;
}
x = changeValue(x);
3:
int[] x = {1,2};
public static void changeValue(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]*=2;
}
}
changeValue(x);
谢谢。
答案 0 :(得分:2)
都可以。至于代码准则,您可以坚持使用本地Java方法,例如Collections#reverse
不返回任何内容。它使传递的对象发生突变。因此,这实际上取决于方法的确切作用。
因此,在您的情况下,我将使用第三个版本。
答案 1 :(得分:2)
实际上,我希望返回一个新数组,而不是修改现有数组:
public static int[] changeValue(int[] arr) {
int[] newArr = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i] * 2;
}
return newArr;
}
答案 2 :(得分:0)
使用Stream
是最干净的方法
public static int[] changeValue(final int[] arr) {
return IntStream.of(arr)
.map(i -> i *= 2)
.toArray();
}
这还将使您传递自定义/变量转换功能
public static int[] changeValue(final int[] arr, final IntUnaryOperator function) {
return IntStream.of(arr)
.map(function)
.toArray();
}
final int[] result1 = changeValue(ints, i -> i *= 2);
final int[] result2 = changeValue(ints, i -> i /= 4);
针对大型数组的不可移植性,简洁代码和可并行化(.parallel()
)。