本文概述
- Java arraycopy()方法
- 不使用arraycopy()方法
- 使用集合
- Java Stream API
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
句法:
public static void arraycopy(Object source, int source_position, Object destination, int destination_position, int length)
参量
- source:这是一个源数组。
- source_position:源数组中的起点。
- destination:这是一个目标数组。
- destination_position:目标数组中的起始位置。
- length:要复制的数组元素的数量
- source_position或destination_position或length为负数。
- source_position + length大于源数组的长度, 或者destination_position + length大于目标数组的长度。
在下面的示例中, 我们创建了两个整数数组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]
推荐阅读
- 如何在Java中打印数组
- 如何在Java中遍历Map
- 如何在Java中从用户获取输入
- 如何用Java创建文件
- 如何在Java中将字节数组转换为String
- 如何编译和运行Java程序
- “双 亲 委 派 机 制”
- 我司Spring Boot 项目打包 + Shell 脚本部署详细总结,太有用了!
- 作为Java开发,知道HashMap底层存储原理总不会害你!