本文概述
用Java合并两个数组类似于在单个数组对象中合并或合并两个数组。我们必须合并两个数组, 以便数组元素在新合并的数组中保持其原始顺序。在新合并的数组中, 第一个数组的元素在第二个数组的元素之前。例如:
int[] arr1={1, 2, 3, 4, 5, 6}; //first array
int[] arr2={7, 8, 9, 0}; //second array
int[] 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 array
int[] secondArray = {77, 11, 45, 88, 32, 56, 3}; //destination array
int fal = firstArray.length; //determines length of firstArray
int sal = secondArray.length; //determines length of secondArray
int[] result = new int[fal + sal]; //resultant array of size first array and second array
System.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 destination
System.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: 2
dest_array: 66 77 88 99 22 67 21 90 80 70
destPos: 4
len: 3
Resultant 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 array
int[] secondArray = {11, 14, 9, 5, 2, 23, 15};
int length = firstArray.length + secondArray.length; //add the length of firstArray into secondArray
int[] mergedArray = new int[length]; //resultant array
int 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 array
String str2[] = { "O", "U" }; //destination array
List 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 list
list.addAll(Arrays.asList(str2));
Object[] str3 = list.toArray(); //converting list to array
System.out.println(Arrays.toString(str3)); //prints the resultant array
}
}
输出:
[A, E, I, O, U]
Java Stream API
Stream.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 arrays
public 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 array
Integer[] secondArray = new Integer[]{78, 34, 56, 67, 2, 11, 7}; //destination array
Object[] mergedArray = mergeArray(firstArray, secondArray); //merged array
System.out.println("Merged array: "+ Arrays.toString(mergedArray));
}
}
输出:
Merged array: [13, 12, 11, 6, 9, 3, 78, 34, 56, 67, 2, 11, 7]
评论前必须登录!
注册