将新阵列分配给现有阵列的正确方法

时间:2019-03-26 16:51:38

标签: java

考虑到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);

谢谢。

3 个答案:

答案 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;
}

详细了解immutability importance

还有Why is immutability so important in software development

答案 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())。