91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Java集合如何實現深拷貝

小樊
115
2024-06-27 19:22:29
欄目: 編程語言

在Java中,實現深拷貝可以通過以下幾種方式:

  1. 使用序列化和反序列化:將對象序列化為字節流,然后再將字節流反序列化為新的對象,這樣就能實現深拷貝。示例代碼如下:
import java.io.*;

public class DeepCopyExample {

    public static void main(String[] args) throws Exception {
        // 創建原始對象
        Person person = new Person("Alice", 25);

        // 深拷貝
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(person);
        oos.close();

        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        Person copiedPerson = (Person) ois.readObject();
        ois.close();

        // 輸出兩個對象的信息,驗證是否是深拷貝
        System.out.println("原始對象:" + person);
        System.out.println("拷貝對象:" + copiedPerson);
    }

    static class Person implements Serializable {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + '}';
        }
    }
}
  1. 使用Cloneable接口和重寫clone()方法:實現Cloneable接口,并重寫clone()方法,在clone()方法中調用super.clone()獲取對象的淺拷貝,然后再對引用類型的屬性進行深拷貝。示例代碼如下:
public class DeepCopyExample {

    public static void main(String[] args) throws CloneNotSupportedException {
        // 創建原始對象
        Person person = new Person("Alice", 25);

        // 深拷貝
        Person copiedPerson = (Person) person.clone();

        // 輸出兩個對象的信息,驗證是否是深拷貝
        System.out.println("原始對象:" + person);
        System.out.println("拷貝對象:" + copiedPerson);
    }

    static class Person implements Cloneable {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        protected Object clone() throws CloneNotSupportedException {
            Person clonedPerson = (Person) super.clone();
            return clonedPerson;
        }

        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + '}';
        }
    }
}

以上是兩種常見的實現深拷貝的方式,開發者可以根據實際情況選擇合適的方式來實現深拷貝。

0
乐亭县| 龙岩市| 乌兰县| 即墨市| 汉中市| 德保县| 沙坪坝区| 独山县| 曲麻莱县| 康乐县| 冕宁县| 卫辉市| 集贤县| 什邡市| 康定县| 江西省| 广南县| 上虞市| 斗六市| 安徽省| 什邡市| 太仆寺旗| 南和县| 黄骅市| 岚皋县| 易门县| 龙江县| 安图县| 凤台县| 信丰县| 兴化市| 双城市| 柏乡县| 阿瓦提县| 马公市| 甘谷县| 察隅县| 蓝田县| 隆回县| 阿城市| 云浮市|