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+"'}";
    }
}

 

posted @ 2016-11-23 19:41  Enast  阅读(2283)  评论(0编辑  收藏  举报