如何在Java中合并两个数组

本文概述

  • Java arraycopy()方法
  • 不使用arraycopy()方法
  • 使用集合
  • Java Stream API
用Java合并两个数组类似于在单个数组对象中合并或合并两个数组。我们必须合并两个数组, 以便数组元素在新合并的数组中保持其原始顺序。在新合并的数组中, 第一个数组的元素在第二个数组的元素之前。例如:
int[] arr1={1, 2, 3, 4, 5, 6}; //first arrayint[] arr2={7, 8, 9, 0}; //second arrayint[] arr3={1, 2, 3, 4, 5, 6, 7, 8, 9, 0} //resultant array

有以下两种方法可以合并两个数组:
  • Java arraycopy()方法
  • 不使用arraycopy()方法
  • Java集合
  • Java Stream API
Java arraycopy()方法Java arraycopy()是属于java.lang包的System类的方法。它将数组从指定的源数组复制到目标数组的指定位置。复制的元素数等于length参数。
句法:
public static void arraycopy(Object source, int source_position, Object destination, int destination_position, int length)

参量
  • source:这是一个源数组。
  • source_position:源数组中的起点。
  • destination:这是一个目标数组。
  • destination_position:目标数组中的起始位置。
  • length:要复制的数组元素的数量
如果源或目标数组为null, 则抛出NullPointerException。如果满足以下条件, 它也会引发ArrayIndexOutOfBoundsException:
  • source_position或destination_position或length为负数。
  • source_position + length大于源数组的长度, 或者destination_position + length大于目标数组的长度。
arraycopy()方法的示例
在下面的示例中, 我们创建了两个整数数组firstArray和secondArray。为了合并两个数组, 我们找到它的长度并分别存储在fal和sal变量中。之后, 我们创建一个新的整数数组结果, 该结果存储两个数组的长度之和。现在, 使用arraycopy()函数将两个数组的每个元素复制到结果数组。
import java.util.Arrays; public class MergeArrayExample1{public static void main(String[] args) {int[] firstArray = {23, 45, 12, 78, 4, 90, 1}; //source arrayint[] secondArray = {77, 11, 45, 88, 32, 56, 3}; //destination arrayint fal = firstArray.length; //determines length of firstArrayint sal = secondArray.length; //determines length of secondArrayint[] result = new int[fal + sal]; //resultant array of size first array and second arraySystem.arraycopy(firstArray, 0, result, 0, fal); System.arraycopy(secondArray, 0, result, fal, sal); System.out.println(Arrays.toString(result)); //prints the resultant array}}

输出:
[23, 45, 12, 78, 4, 90, 1, 77, 11, 45, 88, 32, 56, 3]

让我们看看另一个示例, 其中我们指定了soure_array, destination, dest_position, source位置和length。我们可以根据指定的位置和长度合并数组。

import java.lang.*; public class MergeArrayExample2{ public static void main(String[] args) { int firstArray[] = { 11, 22, 33, 44, 55, 98, 76, 54, 60}; int secondArray[] = {66, 77, 88, 99, 22, 67, 21, 90, 80, 70}; int source_arr[], sourcePos, dest_arr[], destPos, len; source_arr = firstArray; dest_arr = secondArray; sourcePos = 2; destPos = 4; len = 3; // Print elements of source System.out.print("source_array : "); for (int i = 0; i < firstArray.length; i++) System.out.print(firstArray[i] + " "); System.out.println(""); System.out.println("sourcePos : " + sourcePos); // Print elements of destinationSystem.out.print("dest_array : "); for (int i = 0; i < secondArray.length; i++) System.out.print(secondArray[i] + " "); System.out.println(""); System.out.println("destPos : " + destPos); System.out.println("len : " + len); //invoking arraycopy() method System.arraycopy(source_arr, sourcePos, dest_arr, destPos, len); // Print elements of destination after System.out.print("Resultant array : "); for (int i = 0; i < secondArray.length; i++) System.out.print(secondArray[i] + " "); } }

输出:
source_array: 11 22 33 44 55 98 76 54 60 sourcePos: 2dest_array: 66 77 88 99 22 67 21 90 80 70 destPos: 4len: 3Resultant array: 66 77 88 99 33 44 55 90 80 70

不使用arraycopy()方法合并两个数组的示例
在下面的示例中, 我们初始化了两个整数类型的数组firstArray和secondArray。手动将两个数组的每个元素复制到mergedArray, 然后使用Array类的toString()方法将该数组转换为String。
public class MergeArrayExample3{public static void main(String[] args){int[] firstArray = {56, 78, 90, 32, 67, 12}; //initialized arrayint[] secondArray = {11, 14, 9, 5, 2, 23, 15}; int length = firstArray.length + secondArray.length; //add the length of firstArray into secondArrayint[] mergedArray = new int[length]; //resultant arrayint pos = 0; for (int element : firstArray) //copying elements of secondArray using for-each loop{mergedArray[pos] = element; pos++; //increases position by 1}for (int element : secondArray) //copying elements of firstArray using for-each loop{mergedArray[pos] = element; pos++; }System.out.println(Arrays.toString(mergedArray)); //prints the resultant array}}

输出:
[56, 78, 90, 32, 67, 12, 11, 14, 9, 5, 2, 23, 15]

使用集合在Java中合并两个数组的示例
在下面的示例中, 我们初始化了两个String类型的数组str1和str2。之后, 我们使用Arrays.asList()方法创建了str1的列??表视图。现在, 我们创建了str2的列表视图, 并将str2的所有元素添加到列表中。再次执行从列表到数组的转换, 并将结果数组存储到str3变量中。
import java.util.*; public class MergeArrayExample4{public static void main(String args[]) {String str1[] = { "A", "E", "I" }; //source arrayString str2[] = { "O", "U" }; //destination arrayList list = new ArrayList(Arrays.asList(str1)); //returns a list view of an array//returns a list view of str2 and adds all elements of str2 into listlist.addAll(Arrays.asList(str2)); Object[] str3 = list.toArray(); //converting list to arraySystem.out.println(Arrays.toString(str3)); //prints the resultant array}}

输出:
[A, E, I, O, U]

Java Stream APIStream.of()方法
Stream接口的Stream.of()方法返回一个顺序有序的流, 其元素为值。
句法
static < T> Stream< T> of(T....values)

其中MT是流元素的类型。该方法接受值(新流的元素)。
flatMap()方法
flatMap()方法是Stream接口的方法。它返回包含结果的流。
句法
< R> Stream< R> flatMap(Function< ? Super T, ? extends Stream< ? Extends R> > mapper)

其中R是新流的元素类型。该方法接受一个映射器(一个应用于每个产生新值流的元素的函数)作为参数。
toArray()方法
Stream接口的toArray()方法返回一个包含流元素的数组。
句法
Object[] toArray()

使用Stream API合并两个数组的示例
import java.util.stream.Stream; import java.util.Arrays; import java.io.*; public class MergeArrayExample5{ // function to merge two arrayspublic static < T> Object[] mergeArray(T[] arr1, T[] arr2) { return Stream.of(arr1, arr2).flatMap(Stream::of).toArray(); } public static void main (String[] args){ Integer[] firstArray = new Integer[]{13, 12, 11, 6, 9, 3}; //source arrayInteger[] secondArray = new Integer[]{78, 34, 56, 67, 2, 11, 7}; //destination arrayObject[] mergedArray = mergeArray(firstArray, secondArray); //merged arraySystem.out.println("Merged array: "+ Arrays.toString(mergedArray)); } }

【如何在Java中合并两个数组】输出:
Merged array: [13, 12, 11, 6, 9, 3, 78, 34, 56, 67, 2, 11, 7]

    推荐阅读