• 深度复制


    下面是一个例子。

    class DepthReading implements Cloneable{
    	private double depth ;
    	public DepthReading(double depth){
    		this.depth = depth ;
    	}
    	public Object clone (){
    		Object o = null ;
    		try {
    			 o = super.clone() ;
    		} catch (CloneNotSupportedException e) {
    			e.printStackTrace() ;
    		}
    		return o;
    	}
    }
    
    class TempReading implements Cloneable{
    	private long time ;
    	private double temp ;
    	public TempReading(double temp ){
    		this.time= System.currentTimeMillis() ;
    		this.temp = temp ;
    	}
    	
    	public Object clone() {
    		Object o= null ;
    		try {
    			o = super.clone();
    		} catch (CloneNotSupportedException e) {
    			e.printStackTrace();
    		}
    		return o;
    	}
    }
    
    class OceanReading implements Cloneable {
    	private DepthReading  depth ;
    	private TempReading temp ;
    	public OceanReading( double ddata, double tdata){
    		temp = new TempReading(tdata) ;
    		depth = new DepthReading(ddata) ;
    	}
    	
    	public Object clone (){
    		OceanReading  o = null ;
    		try {
    			 o = (OceanReading )super.clone() ;
    		} catch (CloneNotSupportedException e) {
    			e.printStackTrace() ;
    		}
    		//must clone handles 
    		o.depth = (DepthReading)o.depth.clone() ;
    		o.temp = (TempReading)o.temp.clone() ;
    		return o;
    	}
    }
    
    public class DeepCopy {
    	
    	public static void main (String [] args ){
    		OceanReading reading = new OceanReading(33.9,100.5) ;
    		//clone it 
    		OceanReading r = (OceanReading) reading.clone() ;
    	}
    }
    

      

    对 Vector 进行深层复制的先决条件: 在克隆了 Vector 后,必须在其中遍历,并克隆
    由 Vector 指向的每个对象。为了对 Hashtable(散列表)进行深层复制,也必须采取类似的处理。
    这个例子剩余的部分显示出克隆已实际进行——证据就是在克隆了对象以后,可以自由改变它,而原来那个
    对象不受任何影响。
    若在一个对象序列化以后再撤消对它的
    序列化,或者说进行装配,那么实际经历的正是一个“克隆”的过程。
    那么为什么不用序列化进行深层复制呢?下面这个例子通过计算执行时间对比了这两种方法:


  • 相关阅读:

    logging 模块和日志
    re 模块和正则表达式
    collections 模块
    hashlib 模块
    序列化 json 和 pickle
    C++之以分隔符的形式获取字符串
    读取配置文件所在路径时的一种常见错误
    char和achar互转
    C++之ARX,Acstring,ACahr转char
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4362571.html
Copyright © 2020-2023  润新知