当前位置: 首页 > 编程笔记 >

Java克隆执行深拷贝

孙才捷
2023-03-14
本文向大家介绍Java克隆执行深拷贝,包括了Java克隆执行深拷贝的使用技巧和注意事项,需要的朋友参考一下

示例

要复制嵌套对象,必须执行深层复制,如本示例所示。

import java.util.ArrayList;
import java.util.List;

public class Sheep implements Cloneable {

    private String name;

    private int weight;

    private List<Sheep> children;

    public Sheep(String name, int weight) {
       this.name= name;
       this.weight= weight;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        Sheep clone = (Sheep) super.clone();
        if (children != null) {
            // 深拷贝
            List<Sheep> cloneChildren = new ArrayList<>(children.size());
            for (Sheep child : children) {
                cloneChildren.add((Sheep) child.clone());
            }
            clone.setChildren(cloneChildren);
        }
        return clone;
    }

    public List<Sheep> getChildren() {
        return children;
    }

    public void setChildren(List<Sheep> children) {
       this.children= children;
    }

}

import java.util.Arrays;
import java.util.List;

Sheep sheep = new Sheep("Dolly", 20);

Sheep child1 = new Sheep("Child1", 4);
Sheep child2 = new Sheep("Child2", 5);

sheep.setChildren(Arrays.asList(child1, child2));

// 克隆sheep
Sheep dolly =  (Sheep) sheep.clone();
List<Sheep> sheepChildren = sheep.getChildren();
List<Sheep> dollysChildren = dolly.getChildren();
for (int i = 0; i < sheepChildren.size(); i++) {
    // 打印false,两个数组都包含内部对象的副本
    System.out.println(sheepChildren.get(i) == dollysChildren.get(i));
}

           

 类似资料:
  • 本文向大家介绍C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?相关面试题,主要包含被问及C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?时的应答技巧和注意事项,需要的朋友参考一下 (1)浅克隆 在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在

  • 我已经编写了一个测试应用程序,用于演示使用浅层、深层和复制构造函数的Java克隆。 我实现了浅和深,但与复制构造函数我认为我错过了一些东西。 请查看下面的代码,并让我知道复制构造函数实现的修复方法。 输出(复制构造函数) 15007 Amit Chirimiri Kripalu 15007 Amit Chirimiri ShriKrishn 编辑: 由于学生类包含嵌套类(教师)引用,简单的复制构造

  • 我不确定以下内容是否会导致深度复制或浅复制? 有没有简单快速的方法可以深度复制字符串数组?

  • 本文向大家介绍深入理解Java中的克隆,包括了深入理解Java中的克隆的使用技巧和注意事项,需要的朋友参考一下 前言 Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见。但有时候用克隆会更方便更有效率。 对于克隆(Clone),Java有一些限制:       1、被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例

  • 本文向大家介绍深入了解Java对象的克隆,包括了深入了解Java对象的克隆的使用技巧和注意事项,需要的朋友参考一下   今天要介绍一个概念,对象的克隆。本篇有一定难度,请先做好心理准备。看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充。   克隆,自然就是将对象重新复制一份,那为什么要用克隆呢?什么时候需要使用呢?先来看一个小栗子:   简单起见,我们这里用的是Goo

  • deepClone 对象深度克隆 注意 由于JS对象包括的范围非常广,加上ES6又有众多的新特性,很难、也没必要做到囊括所有的类型和情况,这里说的"对象",指的是普通的对象,不包括修改对象原型链, 或者为"Function","Promise"等的情况,请留意。 场景: 我们平时可能会遇到需要通过console.log打印一个对象,至执行打印的时刻,此对象为空,后面的逻辑中对此对象进行了修改赋值,