搜索
首页Javajava教程如何在 Java 中创建二维数组的真实副本而不修改原始数组?

How can I create a true copy of a 2D array in Java without modifying the original array?

在 Java 中复制二维数组

在 Java 中使用多维数组时,通常需要创建数组的副本避免对原始数组进行意外修改。创建副本可确保原始数组保持不变,同时可以自由修改副本而不影响原始数组。

考虑以下场景,其中声明了两个 2D 数组(当前数组和旧数组)并定义了两个辅助方法:

<code class="java">int[][] current;
int[][] old;

public void old() {
  old = current;
}

public void keepold() {
  current = old;
}</code>

调用old()时,将对当前数组的引用分配给旧数组。类似地,当调用 keepold() 时,对旧数组的引用将分配给当前数组。但是,这个简单的分配不会创建实际数据的副本。相反,它只是共享对相同基础数据的相同引用。

对其中一个数组进行更新时,此行为可能会导致混乱。例如,如果对 current 进行更新,然后调用 keepold(),则 current 数组现在将引用与旧数组相同的数据。因此,对 old 的任何进一步修改也会修改 current,这不是预期的行为。

要在 Java 中创建 2D 数组的真实副本,必须采用一种称为深度复制的技术。这涉及创建一个新的二维数组并将原始数组的内容逐个元素复制到其中。这可以使用嵌套循环来实现。

或者,从 Java 8 开始,可以利用 Streams API 来提供一种更简洁、更高效的方法来执行多维数组的深度复制:

<code class="java">int[][] copy = Arrays.stream(matrix).map(int[]::clone).toArray(int[][]::new);</code>

在此代码中,Arrays.stream(matrix) 创建原始数组中的行流。 map(int[]::clone) 操作使用clone() 方法为每一行创建一个新数组。最后, toArray(int[][]::new) 操作将克隆的行组合成一个新的二维数组。这个结果数组是一个真实的副本,可以在不影响原始数组的情况下进行修改。

以上是如何在 Java 中创建二维数组的真实副本而不修改原始数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Java平台独立性:OS之间的差异Java平台独立性:OS之间的差异May 16, 2025 am 12:18 AM

Java在不同操作系统上的表现存在细微差异。1)JVM实现不同,如HotSpot、OpenJDK,影响性能和垃圾回收。2)文件系统结构和路径分隔符不同,需使用Java标准库处理。3)网络协议实现差异影响网络性能。4)GUI组件外观和行为在不同系统上有别。通过使用标准库和虚拟机测试,可减少这些差异的影响,确保Java程序稳定运行。

Java的最佳功能:从面向对象的编程到安全性Java的最佳功能:从面向对象的编程到安全性May 16, 2025 am 12:15 AM

javaoffersrobustobject-IentiendedProgrammming(OOP)和Top-Notchsecurityfeatures.1)OopinjavainCludesClasses,对象,继承,多态性,和列出,andeclingfleximaintainablesys.ss.2)SecurityFeateTuersLudEtersludEterMachine(

JavaScript与Java的最佳功能JavaScript与Java的最佳功能May 16, 2025 am 12:13 AM

JavaScriptandJavahavedistinctstrengths:JavaScriptexcelsindynamictypingandasynchronousprogramming,whileJavaisrobustwithstrongOOPandtyping.1)JavaScript'sdynamicnatureallowsforrapiddevelopmentandprototyping,withasync/awaitfornon-blockingI/O.2)Java'sOOPf

Java平台独立性:收益,限制和实施Java平台独立性:收益,限制和实施May 16, 2025 am 12:12 AM

JAVAACHIEVESPLATFORMINDEPENTENCETHROUGHJAVAVIRTAILMACHINE(JVM)和BYTECODE.1)THEJVMINTERPRETSBBYTECODE,允许theingthesmecodetorunonanyanyanyanyplatformwithajvm.2)

Java:真实词的平台独立性Java:真实词的平台独立性May 16, 2025 am 12:07 AM

Java'splatFormIndependecemeanSapplicationsCanrunonAnyPlatFormWithAjvm,使“ Writeonce,RunanyWhere”。

JVM性能与其他语言JVM性能与其他语言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生产性。1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台独立性:使用示例Java平台独立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允许CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架构:深入研究Java虚拟机JVM架构:深入研究Java虚拟机May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。