`
Will_Turner
  • 浏览: 69732 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

Java数组的复制操作可以分为<深复制>和<浅复制>。个人简单认为,深复制就是<对象的值和内容的复制>,浅复制就是<对象引用的复制>。

 

下面以Java的字符串数组为例,介绍一下如何实现深复制。

 

首先是待复制的Java字符串数组

String[][] strArray=new String[][]{
		{"a","b","c"},
		{"A","B","C","D"},
		{"1","2"}
};
 

后台打印字符串数组的静态方法

public static void printArray(String[][] array){
	for(int i=0;i<array.length;i++){
		for(int j=0;j<array[i].length;j++){
			System.out.print(array[i][j]+"  ");
		}
		System.out.println();
	}
}
 

1、使用循环语句遍历复制

String[][] copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
	copyArray[i]=new String[strArray[i].length];
	for(int j=0;j<strArray[i].length;j++){
		copyArray[i][j]=strArray[i][j];
	}
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
 

2、使用java.lang.System.arraycopy()方法复制(推荐使用)

copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
	copyArray[i]=new String[strArray[i].length];
	System.arraycopy(strArray[i], 0, copyArray[i], 0, strArray[i].length);
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
 

3、使用java.lang.Object类的clone()方法复制(不推荐使用)

copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
	copyArray[i]=strArray[i].clone();
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");

 

4、使用java.util.Arrays.copyOf()方法复制(内部实现是调用System.arraycopy)

copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
	copyArray[i]=Arrays.copyOf(strArray[i], strArray[i].length);
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
 

说明一点,作为Javaer,我们都知道<二维数组>这个概念,其实Java没有二维数组这概念。所谓的二维数组,应该理解成<元素内容是数组的一个数组,即数组的数组>。这样的理解不容易混淆视听,以上边第二点为例。假如没有真正理解数组的数组这个概念,很容易写下如下错误的代码。

System.arraycopy(strArray, 0, copyArray, 0, strArray.length);
 
分享到:
评论

相关推荐

    Java数组集合的深度复制代码实例

    Java数组集合的深度复制代码实例 Java数组集合的深度复制代码实例是Java程序设计中的一种重要技术,它可以将数组或集合中的数据复制到另一个数组或集合中,从而实现数据的备份或传输。本文将通过示例代码详细介绍...

    java List 深度复制方法

    这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来理解一下什么是浅复制和深复制。在Java中,当我们使用`clone()`方法或`System.arraycopy()`进行复制时,通常得到的是浅复制的结果。这意味着原始对象...

    Java 数组复制clone方法实现详解

    在Java编程语言中,数组复制是一个常见的操作,用于创建一个现有数组的副本。本文将深入讲解如何使用`clone()`方法来实现数组复制,并...因此,在处理对象数组时,需要根据具体需求决定是否需要自定义深度复制逻辑。

    java不同对象及集合的多次复制

    - **Dozer库**:允许使用注解来定义复制规则,支持深度复制和类型转换,可以实现不同对象间的复制。 - **ModelMapper库**:提供了`ModelMapper`类,可以通过配置注解自动映射对象,简化了复制过程。 4. **集合与...

    java的深度克隆的例子

    在Java编程语言中,"深度克隆"是一个重要的概念,主要涉及到对象复制。深度克隆,也称为完全克隆,是指创建一个与原对象相同的新对象,不仅复制原对象的所有属性,还复制了原对象中引用的对象。这通常用于创建一个...

    Java深度复制功能与用法实例分析

    在这个例子中,`deepCopy`方法首先将对象序列化到字节数组,然后通过反序列化创建一个新的对象,从而实现深度复制。注意,这种方法只适用于实现了`Serializable`接口的类。对于不可序列化的类,可以考虑使用克隆方法...

    java中实现复制文件和文件夹

    需要注意的是,这段代码仅处理了文件和文件夹的深度为1的情况,即只复制指定的源文件夹及其直接子文件夹和文件。如果源文件夹中包含嵌套的子文件夹,这种方法可能无法正确地复制整个文件结构。为了完全复制包括所有...

    java深度克隆

    在Java中,深度克隆是一种用于创建对象副本的方法,它可以确保复制出的新对象与原对象之间没有任何引用关系,也就是说,新对象中的所有成员变量(包括引用类型)都是原对象对应成员变量的副本。这种特性使得深度克隆...

    java对象复制克隆

    标签中的“复制java对象”、“深度克隆”和“深度复制实例”强调了我们要关注的是Java中如何实现对象的深拷贝,并提供了实际操作的例子。在编写代码时,应该遵循良好的编程实践,包括适当的命名、注释和错误处理,以...

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    这篇博文“MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象”探讨的是如何在Java编程中实现对象属性的深度复制。MyBatis是一个流行的Java持久层框架,它简化了数据库操作,而对象复制则是处理业务...

    【IT十八掌徐培成】Java基础第16天-03.串行化-深度复制.zip

    深度复制和浅复制是复制对象的两种方式。浅复制只是复制对象的引用,而深复制则会创建一个新的对象,并复制原对象的所有属性,包括嵌套的对象。对于非基本类型的成员变量,如果进行浅复制,新复制的对象和原对象会...

    android 浅复制和深复制-Java Generic Deep Copy 篇

    本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝。 首先,我们要理解浅复制和深复制的概念。浅复制(Shallow Copy)是指创建一个新的对象,然后将原对象引用...

    数据复制代码JAVA

    综上所述,Java提供了多种方法来实现数据复制,包括基础的赋值操作、系统级别的数组复制、集合的复制、NIO的通道和缓冲区、Stream API,以及在大数据和并行计算环境中的高级应用。理解和掌握这些技术,可以帮助...

    Java中使用数组实现栈数据结构实例

    总之,理解并能正确实现栈数据结构是Java编程中的基础技能,对于处理递归、表达式求值、深度优先搜索等问题具有重要意义。数组实现虽然简单,但在处理大数据量时可能会有性能瓶颈,因此在实际应用中,也可以考虑使用...

    图的深搜+树状数组练习 POJ 3321(JAVA)

    标题中的“图的深搜+树状数组练习 POJ 3321(JAVA)”指的是一个编程题目,其中涉及到图的深度优先搜索(DFS, Depth First Search)算法和树状数组(也称为线段树,Segment Tree)的数据结构。这个题目来源于POJ...

    深入JAVA对象深度克隆的详解

    总之,Java对象的深度克隆是解决复杂对象复制问题的有效手段,通过序列化和反序列化确保了新旧对象的完全独立。然而,它也有其局限性和潜在性能影响,所以在实际应用中应根据具体情况选择合适的克隆策略。

    一行代码实现纯数据json对象的深度克隆实现思路

    在JavaScript中,深度克隆指的是创建一个新对象,其内容完全复制自源对象,包括所有嵌套的对象和数组。在处理复杂的数据结构时,深度克隆尤为重要,因为它能确保源对象不受目标对象的修改影响。标题提到的"一行代码...

    华为OD机试C卷- 数组二叉树(Java & JS & Python).md-私信看全套OD代码及解析

    ### 华为OD机试C卷- 数组二叉树(Java & JS & Python) #### 颈椎题目概述 本题目主要考察的是利用数组来表示二叉树,并且通过深度优先搜索(DFS)的方式寻找从根节点到最小叶子节点的路径。题目描述中给出了非常...

    java 深克隆浅克隆

    实现深克隆通常需要自定义实现,因为Java的`clone()`方法不支持自动深度克隆。一种常见的实现方法是序列化和反序列化对象。首先,将对象序列化为字节数组,然后从字节数组反序列化为新的对象。这种方法可以保证所有...

Global site tag (gtag.js) - Google Analytics