美文网首页
Java 对象深度clone的两种方式

Java 对象深度clone的两种方式

作者: gqs已经存在 | 来源:发表于2019-05-10 15:13 被阅读0次

Java 对象深度clone的两种方式

实现Cloneable接口

  1. 该类及其所有需要复制的引用类型的成员变量 实现Cloneable接口
  2. 该类及其所有需要复制的引用类型的成员变量 重写 clone()方法

实例

特点

  1. 实现麻烦, 特别是当引用类型的成员变量较多时
  2. 性能好

序列化实现

  1. 该类及所有需要复制的引用类型成员变量实现Serializable接口
  2. 将对象序列化后再反序列化出新的对象

实例

public User deepClone() {
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = null;
        ByteArrayInputStream bi;
        ObjectInputStream oi = null;
        try {
            oo = new ObjectOutputStream(bo);
            oo.writeObject(this);
            bi = new ByteArrayInputStream(bo.toByteArray());
            oi = new ObjectInputStream(bi);
            return (User) oi.readObject();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return null;
    }

特点

  1. 实现相对简单
  2. 性能较差

性能对比

创建User 类 ,增加一个HashMap 成员变量,分别通过以上两种方式进行对象复制。

  • 结果
方式 执行次数 耗时(ms)
通过重写Clone方法 10000 3
序列化 10000 714

总结

通过性能对比,可以看出,两种方式,性能相差悬殊,且随着需要复制对成员变量增多,性能差距会更加明显。
所以若对性能要求较低,为方便可以通过序列化方式实现,并且不建议直接在主线程操作,否则,为保证性能,仍需通过实现Cloneable接口方式来完成。

相关文章

  • Java 对象深度clone的两种方式

    Java 对象深度clone的两种方式 实现Cloneable接口 该类及其所有需要复制的引用类型的成员变量 实现...

  • JDK阅读笔记

    OBJECT clone(); 一、Java中有两种方式创建对象:1、使用new操作符创建对象;2、使用clone...

  • java中clone方法的实现

    java中仅有的创建对象的两种方式:①.使用new操作符创建对象;②.使用clone方法复制对象。由于clone方...

  • Java中的clone

    Java中对象的创建 使用new操作符创建一个对象 使用clone方法复制一个对象 那么这两种方式有什么相同和不同...

  • Java对象的拷贝

    对象的拷贝 深度拷贝一个对象 java.lang.Object 根类已经定义了 clone() 方法。子类只需要事...

  • 详解Java中的clone方法 -- 深拷贝和浅拷贝

    Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。...

  • 深拷贝、浅拷贝

    创建对象普遍有两种方式:构建和拷贝。 构建是用new的方式,适合构建初始化状态对象的情况;拷贝是用clone的方式...

  • Java中的clone方法你知道多少?

    我们知道clone方法在Java中是一个复制对象的方法,那么Java有几种创建对象的方式呢? 1.通过new关键字...

  • Kotlin中clone方法

    java中创建对象的方式:new关键字 clone 反射 反序列化 1 new 创建对象 执行语句var pers...

  • java反射详解

    ## 引言 ### java中创建对象有几种方式? #### 1.使用new关键字 #### 2.使用clone方...

网友评论

      本文标题:Java 对象深度clone的两种方式

      本文链接:https://www.haomeiwen.com/subject/tbeaoqtx.html