在特定位置初始化另一个数组时使用数组

Use Arrays when initializing another Array at specific position

我有一个整数数组。 int[] arr1 = new int[] {3, 4, 5};。我想在初始化另一个数组时插入这个数组。这样当 int[] arr2 = new int[] {8, 7, arr1, 1, 0};,arr2 将等于 {8, 7, 3, 4, 5, 1, 0}

另外,我不知道arr1的长度,所以我做不到int[] arr2 = new int[] {8, 7, arr1[0], arr1[1], arr1[2], 1, 0};

非常感谢任何帮助。

这在 java 中不受本地支持/没有允许您使用单行的语言功能。 您当然可以编写一个循环来插入另一个数组的元素,您也可以使用列表接口或 Arrays#stream。最好的方法可能是使用列表,如下所示:

List<Integer> arr1 = Arrays.asList(3, 4, 5);
List<Integer> arr2 = Arrays.asList(8, 7, 1, 0);
arr2.addAll(2, arr1);

希望对您有所帮助。

编辑:顺便说一句,它是一条线 :)

您可以使用 ArrayUtils.addAll() 三次。

int[] arr1 = new int[] {3, 4, 5};
int[] arr2 = new int[arr1.length + 4];
ArrayUtils.addAll(arr2, new int[]{8, 7});
ArrayUtils.addAll(arr2, arr1);
ArrayUtils.addAll(arr2, new int[]{1, 0});

ArrayUtils 是 Apache Commons 的一部分。

遗憾的是,据我所知,类似的事情无法在一次操作中完成。我能想到的最好的方法是创建一个 result 数组。然后将 arr2 的第一部分、整个 arr1 和最后 arr2 的第二部分复制到其中。最后整个方法看起来像这样:

private static int[] insertArrayAtPosition(int[] arr1, int[] arr2, int insertPos){
    int[] result = new int[arr1.length + arr2.length];
    System.arraycopy(arr2, 0, result, 0, insertPos);
    System.arraycopy(arr1, 0, result, insertPos, arr1.length);
    System.arraycopy(arr2, insertPos, result, insertPos + arr1.length, arr2.length - insertPos);
    return result;
}

然后你可以这样称呼它:

public static void main(String args[]) {
    int[] arr1 = new int[] {3, 4, 5};
    int[] arr2 = new int[] {8, 7, 1, 0};
    int[] result = insertArrayAtPosition(arr1, arr2, 2);
    System.out.println(Arrays.toString(result));
}

编辑:Milgo 的解决方案看起来好多了。但是,我的允许在创建数组后将一个数组插入到另一个数组的特定位置。使用哪个取决于用例。