项目中copy List 数据,解决修改值后改变原值问题

在copy 对像时,发现改变copy对象的属性值时,都会改变原值,方法如下:

List<A> a ;//a为方法参数中传进来的list;

方法1:

List<A> b = new ArrayList<A>(a);

方法2:

List<A> b = new ArrayList<A>(Arrays.asList(new A[a.size()]));
Collections.copy(b, a);

以上方法copy完毕后,经测试都会改变原list的对象属性值,放弃;

使用以下方法解决了此问题

/**
     * list中的对象必须实现序列化接口 执行序列化和反序列化  进行深度拷贝  
     * @param srcList
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    @SuppressWarnings("unchecked")
    private <T> List<T> deepCopy(List<T> srcList) throws IOException, ClassNotFoundException {  
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        ObjectOutputStream out = new ObjectOutputStream(byteOut);  
        out.writeObject(srcList);  
 
        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());  
        ObjectInputStream in = new ObjectInputStream(byteIn);  
        List<T> destList = (List<T>) in.readObject();  
        return destList;  
    }


你可能感兴趣的:(java,list,IO,copy)