ArrayList实现深拷贝

描述:

在日常工作中,经常会遇到需要复制或者拷贝一个ArrayList的一个情况,而我们经常使用一些方法,比如 =、stream流、addAll 等方法都是浅拷贝,一个对象的改变,另一个对象也会随之改变,没有达到我们想要的结果。

方法:

1、首先需要在我们需要拷贝的实体类上实现Serializable接口

2、编写以下方法

/**
     * Desc: 深度拷贝
     * Author: 
     **/
    private List deepCopy(List srcList) throws IOException, ClassNotFoundException {
        List desList = null;
        ByteArrayOutputStream baos=null;
        ObjectOutputStream oos=null;
        ByteArrayInputStream bais=null;
        ObjectInputStream ois=null;
        try {
            //序列化
            baos= new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(srcList);

            //反序列化
            bais = new ByteArrayInputStream(baos.toByteArray());
            ois = new ObjectInputStream(bais);
            desList = (List) ois.readObject();
        } catch (Exception exception) {
            exception.printStackTrace();
        } finally {
            baos.close();
            oos.close();
            bais.close();
            ois.close();
        }
        return desList;
    }

3.直接调用该方法就可以直接深拷贝一个list了。 

你可能感兴趣的:(java,开发语言)