在特定位置初始化另一个数组时使用数组
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 的解决方案看起来好多了。但是,我的允许在创建数组后将一个数组插入到另一个数组的特定位置。使用哪个取决于用例。
我有一个整数数组。
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 的解决方案看起来好多了。但是,我的允许在创建数组后将一个数组插入到另一个数组的特定位置。使用哪个取决于用例。