用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

Java List 的深拷贝

2015-04-19 作者: java源代码大全举报

[java]代码库

</pre><pre name="code" class="java">/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.*;

/**
 *
 * @author User
 */

class Weiz implements Serializable{//对象序列化,要实现这个接口
  private static final long serialVersionUID=123L;//序列化版本
  double x;
  public Weiz(double a){
    x=a;
  }
}

public class test_copy {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // TODO code application logic here
        List<Weiz> lst=new ArrayList();
        lst.add(new Weiz(1.1));
        lst.add(new Weiz(1.2));
        lst.add(new Weiz(1.3));
        System.out.println("复制前,原始lst:");
        for(int i=0;i<lst.size();++i){
          System.out.println(lst.get(i)+" "+lst.get(i).x);
        }
        //System.out.println();
        //构造函数复制                     浅拷贝
        List<Weiz> lst2=new ArrayList(lst);
        //lst2.set(1, new Weiz(2.1));
        lst2.get(0).x=2.1;
        System.out.println("构造函数复制且修改后,新的lst2:");
        for(int i=0;i<lst2.size();++i){
          System.out.println(lst2.get(i)+" "+lst2.get(i).x);
        }
        System.out.println("构造函数复制且修改后,原始lst:");
        for(int i=0;i<lst.size();++i){
          System.out.println(lst.get(i)+" "+lst.get(i).x);
        }
        
        List<Weiz> lst3=deepCopy(lst);
        lst3.get(0).x=3.1;
        System.out.println("对象序列化复制且修改后,新的lst3:");
        for(int i=0;i<lst3.size();++i){
          System.out.println(lst3.get(i)+" "+lst3.get(i).x);
        }
        System.out.println("对象序列化复制且修改后,原始lst:");
        for(int i=0;i<lst.size();++i){
          System.out.println(lst.get(i)+" "+lst.get(i).x);
        }
        
        List<Weiz> lst4=deepCopy(lst);
        lst4.get(0).x=4.1;
        System.out.println("对象序列化复制且修改后,新的lst4:");
        for(int i=0;i<lst4.size();++i){
          System.out.println(lst4.get(i)+" "+lst4.get(i).x);
        }
        System.out.println("对象序列化复制且修改后,原始lst:");
        for(int i=0;i<lst.size();++i){
          System.out.println(lst.get(i)+" "+lst.get(i).x);
        }
    }
    
    //关键代码 执行序列化和反序列化  进行深度拷贝  
    public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException {  
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        ObjectOutputStream out = new ObjectOutputStream(byteOut);  
        out.writeObject(src);  
  
        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());  
        ObjectInputStream in = new ObjectInputStream(byteIn);  
        @SuppressWarnings("unchecked")  
        List<T> dest = (List<T>) in.readObject();  
        return dest;  
    }  
      
       //关键代码 执行序列化和反序列化  进行深度拷贝,写法不同而已,作用一样  
       //个人习惯 怎么喜欢怎么来!  
    public List deepCopy2(List src) throws IOException, ClassNotFoundException{             
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();             
        ObjectOutputStream out = new ObjectOutputStream(byteOut);             
        out.writeObject(src);                    
        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());             
        ObjectInputStream in =new ObjectInputStream(byteIn);             
        List dest = (List)in.readObject();             
        return dest;         
    }   
}//源代码片段来自云代码http://yuncode.net
			

run:
复制前:
readdxflunwen.Weiz@c17164 1.1
readdxflunwen.Weiz@1fb8ee3 1.2
readdxflunwen.Weiz@61de33 1.3
构造函数复制且修改后,新的lst2:
readdxflunwen.Weiz@c17164 2.1
readdxflunwen.Weiz@1fb8ee3 1.2
readdxflunwen.Weiz@61de33 1.3
构造函数复制且修改后,原始lst:
readdxflunwen.Weiz@c17164 2.1
readdxflunwen.Weiz@1fb8ee3 1.2
readdxflunwen.Weiz@61de33 1.3
对象序列化复制且修改后,新的lst3:
readdxflunwen.Weiz@60aeb0 3.1
readdxflunwen.Weiz@16caf43 1.2
readdxflunwen.Weiz@66848c 1.3
对象序列化复制且修改后,原始lst:
readdxflunwen.Weiz@c17164 2.1
readdxflunwen.Weiz@1fb8ee3 1.2
readdxflunwen.Weiz@61de33 1.3
对象序列化复制且修改后,新的lst4:
readdxflunwen.Weiz@8813f2 4.1
readdxflunwen.Weiz@1d58aae 1.2
readdxflunwen.Weiz@83cc67 1.3
对象序列化复制且修改后,原始lst:
readdxflunwen.Weiz@c17164 2.1
readdxflunwen.Weiz@1fb8ee3 1.2
readdxflunwen.Weiz@61de33 1.3
成功构建 (总时间: 4 秒)//源代码片段来自云代码http://yuncode.net
			


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...