个性化阅读
专注于IT技术分析

如何在Java中合并两个数组

本文概述

用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]

赞(0)
未经允许不得转载:srcmini » 如何在Java中合并两个数组

评论 抢沙发

评论前必须登录!