如何在 Java 中合并两个数组?12 Feb 2025 | 7 分钟阅读 在 Java 中合并两个数组是一项基本操作,在各种应用程序中经常需要。根据具体需求和问题约束,可以通过多种方式完成。 在 Java 中合并两个数组类似于将两个数组连接或组合到一个数组对象中。我们必须合并两个数组,以便数组元素在新的合并数组中保持其原始顺序。第一个数组的元素在新合并的数组中位于第二个数组的元素之前。 例如 用例在 Java 中合并两个数组是在各种场景中常见的任务,包括: 数据处理:处理存储在多个数组中的数据集时,合并它们可以简化数据处理和分析。例如,合并学生姓名和相应成绩的数组有助于计算平均值或按成绩排序。 用户输入:在用户可以分批或分段输入数据的应用程序中,合并数组可以方便地将多个输入数组合并到一个数据集中,以进行进一步处理或存储。 数据库操作:从数据库检索数据时,结果可能存储在表示不同列或属性的独立数组中。合并这些数组可以整合数据以供显示或操作。 排序和搜索:合并数组通常是排序或搜索算法的前提。在应用这些操作之前,必须将较小的数组合并到较大的数组中,以确保在整个数据集中进行正确的排序或搜索。 资源管理:在资源受限的环境中,合并数组可以通过最大限度地减少独立数组的数量来节省内存,从而实现更有效的资源利用。 合并两个数组的方法以下是合并两个数组的方法:
Java System.arraycopy() 方法Java 中的 System.arraycopy() 方法是一种强大而高效的将元素从一个数组复制到另一个数组的方法。它用于执行数组元素的浅拷贝。它可以用于将元素从一个数组复制到另一个数组,复制子数组,或在数组内移动元素。复制的元素数量等于 length 参数。 语法 参数
如果源数组或目标数组为 null,它将抛出 NullPointerException。如果发生以下情况,它还将抛出 ArrayIndexOutOfBoundsException:
arraycopy() 方法示例 在以下示例中,我们创建了两个整数数组 firstArray 和 secondArray。为了合并两个数组,我们计算它们的长度并分别存储在 fal 和 sal 变量中。之后,我们创建一个新的整数数组 result,它存储两个数组长度的总和。现在,使用 arraycopy() 函数将两个数组的每个元素复制到 result 数组。 MergeArrayExample1.java 输出 [23, 45, 12, 78, 4, 90, 1, 77, 11, 45, 88, 32, 56, 3] 让我们看另一个示例,其中我们指定了 source_array、destination、dest_position、source_position 和 length。我们可以根据指定的位置和长度合并数组。 示例 MergeArrayExample2.java 输出 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() 方法System.arraycopy() 方法是 Java 中用于在数组之间复制元素的有效本地方法。它处理类型安全、边界检查,并且由于其底层实现,其复制操作比手动循环快得多。如果不使用 System.arraycopy(),则必须手动循环遍历源数组以将元素复制到目标数组,这效率较低且更容易出错,尤其是对于大型数组。这是一个使用循环手动复制元素的简单示例: 合并两个数组的示例 在以下示例中,我们初始化了两个整数类型的数组 firstArray 和 secondArray。手动将这两个数组的每个元素复制到 mergedArray,并使用 Array 类的 toString() 方法将其转换为 String。 MergeArrayExample3.java 输出 [56, 78, 90, 32, 67, 12, 11, 14, 9, 5, 2, 23, 15] 使用 Collections使用 Java Collections Framework 提供了一种灵活高效的方式来管理对象组。ArrayList、LinkedList、HashSet 和 HashMap 等集合提供了动态数据结构,可以根据需要增长或缩小,而固定大小的数组则不行。它们提供了用于添加、删除和操作元素的内置方法,使排序、搜索和合并等任务更简单、更高效。 例如,ArrayList 允许动态调整大小并提供 add()、remove() 和 get() 等方法。Collections 还支持泛型,确保编译时的类型安全。可以使用 addAll() 等方法轻松合并两个集合。 Java 中合并两个数组的示例 在以下示例中,我们初始化了两个 String 类型的数组 str1 和 str2。然后,我们使用 Arrays.asList() 方法创建了 str1 的列表视图。现在,我们创建了 str2 的列表视图并将 str2 的所有元素添加到列表中。再次执行从列表到数组的转换,并将结果数组存储到 str3 变量中。 MergeArrayExample4.java 输出 [A, E, I, O, U] Java Stream APIStream.of() 方法 Stream 接口的 Stream.of() 方法返回一个顺序流,其元素为指定的值。 语法 其中,T 是流元素的类型。该方法接受 values(新流的元素)。 Stream.flatMap() 方法 Stream.flatMap() 方法是 Stream 接口的方法。它返回一个由结果组成的流。 语法 其中 R 是新流的元素类型。该方法接受一个 mapper(应用于每个元素以生成新值流的函数)作为参数。 Stream.toArray() 方法 Stream 接口的 Stream.toArray() 方法返回一个包含流中元素的数组。 语法 使用 Stream API 合并两个数组的示例 MergeArrayExample5.java 输出 Merged array: [13, 12, 11, 6, 9, 3, 78, 34, 56, 67, 2, 11, 7] 最佳实践
结论System.arraycopy() 方法是在 Java 中复制数组元素的通用且高效的工具。通过了解其参数、处理异常以及知道何时使用它,我们可以有效地管理 Java 应用程序中的数组操作。无论是合并数组、复制子数组还是移动元素,System.arraycopy() 都为这些任务提供了可靠的解决方案。 下一个主题Java 教程 |
? Null Pointer Exception 是一种运行时异常,当 Java 程序尝试使用包含 null 值的对象引用时抛出。在以下情况下可以抛出 Null Pointer Exception:1. 使用对象调用方法...
阅读 4 分钟
Java 自问世几十年来,已证明自己是软件开发中占主导地位的编程语言。Java 的成功源于被称为 Java 流行语的设计原则,这些原则塑造了其整个理念。Java 流行语通过定义其关键特征来为 Java 的架构奠定基础。1....
5 分钟阅读
在 Java 8 中,DoubleBinaryOperator 接口应运而生。它返回一个双精度值作为对它表示的两个双精度值执行操作的最终结果。它可以作为方法引用或 lambda 表达式使用,因为它是一个函数式...
阅读 3 分钟
ExecutorService.execute() 和 submit() 方法用于将任务提交给 ExecutorService 对象。execute() 方法接受一个 Runnable 任务,而 submit() 方法接受 Runnable 和 Callable 任务。execute() 方法没有返回值,而 submit() 方法返回……
阅读 4 分钟
? 在 Java 编程世界中,构造函数是用于初始化对象的特殊方法。当使用 new 关键字创建对象时,会调用它们,并且它们负责设置对象的初始状态。构造函数通常是公共的,并且与...
阅读 3 分钟
在 Java 中,非检查异常也称为运行时异常。非检查异常是异常的一个子集,不需要使用 throws 关键字在方法签名中声明。它们继承自 RuntimeException 类,该类本身是 Exception 的子类...
阅读 8 分钟
二进制数在计算机科学中起着至关重要的作用。它仅使用数字 0 和 1 来显示信息。确定一个二进制数是否可被 3 整除需要理解模运算、数字和乘法。可以分析二进制数以...
5 分钟阅读
Java 中的 return 语句是什么?在 Java 编程中,当代码块执行完成后,return 语句用于返回一个值。循环内的 return 语句将导致循环中断,并且后面的语句将被忽略...
7 分钟阅读
在 Java 编程语言中,接口是一种引用类型。接口类似于类。它只能包含常量、方法签名、默认方法、静态方法、嵌套类型和私有方法(Java 9 中引入)。只有默认方法和静态方法才有方法体...
5 分钟阅读
在快速发展的商业环境中,Java 已成为使用最广泛的编程语言之一。其多功能性、平台独立性和丰富的库使其成为开发健壮且可扩展的企业应用程序的首选。然而,与任何技术一样,Java 并非没有...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India