Java-Map深拷贝

文章介绍了如何在Java中使用对象的序列化进行深拷贝,并提供了`clone`方法和`createListByLen`方法的示例,展示了如何创建和操作List以及Map的深拷贝过程。
摘要由CSDN通过智能技术生成
/**
 * 使用对象的序列化进而实现深拷贝
 * @param obj
 * @param <T>
 * @return
 */
private static  <T extends Serializable> T clone(Map<String, Object> obj) {
    T cloneObj = null;
    try {
        ByteOutputStream bos = new ByteOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(obj);
        oos.close();
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        cloneObj = (T) ois.readObject();
        ois.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return cloneObj;
}
/**
 * 生成指定长度的List并填充内容
 */
public static void createListByLen(){
    // 创建一个存放int型的数组,同时填充四个整型对象1
    List<Integer> intArr = new ArrayList<Integer>(Collections.nCopies(4, 1));
    System.out.println(intArr.toString());
    //将intArr容器填充为2
    Collections.fill(intArr, 2);
    System.out.println(intArr.toString());

    HashMap<String, Object> lzh = new HashMap<>();
    lzh.put("name", "");
    lzh.put("age", "");
    lzh.put("sex", "");
    lzh.put("phone", "");
    lzh.put("bj", new ArrayList<>());
    List<Map<String, Object>> dataList = new ArrayList<>(Collections.nCopies(3, new HashMap<>()));
    Collections.fill(dataList, lzh);

    Map<String, Object> map = clone(dataList.get(1));
    map.put("name", "张三");
    map.put("age", 18);
    map.put("sex", "男");
    map.put("phone", "110");
    map.put("bj", new ArrayList<>());
    dataList.set(1, map);

    System.out.println(dataList);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值