java hasmap对象的深复制实现:字节码复制和对象序列化成字符串复制比较。


/**
 * Created by Administrator on 2016/11/23.
 */
public class test {
    public static void  main(String[] args){

            List<model> list = new ArrayList<>();
            for(int i=0;i<100;i++){
                list.add(new model(1,"ss"));
            }
            HashMap<String,Object> map = new HashMap<String,Object>();
            //放基本类型数据
            map.put("basic", 100);
            //放对象
            map.put("list", list);

            HashMap<String,Object> mapNew = new HashMap<String,Object>();
            HashMap<String,Object> mapNew2 = new HashMap<String,Object>();
            mapNew.putAll(map);
            Long starttime =System.currentTimeMillis();
            mapNew = CloneUtils.clone(map);
            Long endtime =System.currentTimeMillis();
            System.out.println("使用字节复制所需时间:"+(endtime-starttime));
            //System.out.println(mapNew);

            System.out.println("---------");
            starttime =System.currentTimeMillis();
            String  jsonstr = JSON.toJSONString(map);
            mapNew2 = JSON.parseObject(jsonstr,mapNew2.getClass());
            endtime =System.currentTimeMillis();
            System.out.print("使用json复制所需时间:"+(endtime-starttime));

            //System.out.println(mapNew2);


    }

}
/**
 * Created by Administrator on 2016/11/23.
 */
public class CloneUtils {

    @SuppressWarnings("unchecked")
    public static <T> T clone(T obj){

        T clonedObj = null;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(obj);
            oos.close();

            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            clonedObj = (T) ois.readObject();
            ois.close();

        }catch (Exception e){
            e.printStackTrace();
        }

        return clonedObj;
    }
}
/**
 * Created by Administrator on 2016/11/23.
 */
public class model {
    private  int id;
    private String name;

    public model(){

    }

    public model(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "{'id':"+this.id+",'name':'"+this.name+"'}";
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM