Map 深、浅拷贝

浅拷贝

User类

public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

浅拷贝类

public static void main(String[] args) {
    Map<String, User> originalMap = new HashMap<>();
    originalMap.put("key1", new User("张三"));
    originalMap.put("key2", new User("李四"));

    // 浅拷贝
    Map<String, User> shallowCopy = new HashMap<>(originalMap);

    System.out.println("原始Map: " + originalMap);
    System.out.println("拷贝Map: " + shallowCopy);

    // 修改原始Map
    originalMap.get("key1").setName("王五");

    System.out.println("====修改后====");
    System.out.println("原始Map: " + originalMap);
    System.out.println("拷贝Map: " + shallowCopy);
}

执行结果

深拷贝

User类

public class User implements Cloneable{
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

深拷贝类

public static void main(String[] args) {
    Map<String, User> originalMap = new HashMap<>();
    originalMap.put("key1", new User("张三"));
    originalMap.put("key2", new User("李四"));


    Map<String, User> deepCopy = new HashMap<>();
    originalMap.forEach((key, value) -> {
        try {
            deepCopy.put(key, (User) value.clone());
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    });

    System.out.println("原始Map: " + originalMap);
    System.out.println("拷贝Map: " + deepCopy);

    // 修改原始Map
    originalMap.get("key1").setName("王五");

    System.out.println("====修改后====");
    System.out.println("原始Map: " + originalMap);
    System.out.println("拷贝Map: " + deepCopy);
}

执行结果

结论
  • 浅拷贝:复制对象的引用,修改一个会影响另一个。
  • 深拷贝:递归复制所有对象,修改一个不会影响另一个。
常用的Map拷贝方法

put()

HashMap<String, String> aMap = new HashMap<>();
HashMap<String, String> bMap = new HashMap<>();
aMap.foreach((key, value)-> {
    bMap.put(key,value);
});

putAll()

HashMap<String, String> aMap = new HashMap<>();
HashMap<String, String> bMap = new HashMap<>();
bMap.putAll(aMap);

clone()

HashMap<String, String> map = new HashMap<>();
Object cloneMap = map.clone();

toMap()

Set<Map.Entry<String, String>> entries = map.entrySet();
Map<String, String> copyMap = entries.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Google Guava - 不可变的map

ImmutableMap<String, String> immutableMap = ImmutableMap.copyOf(map);

apache commons包

HashMap<String, String> cloneMap = SerializationUtils.clone(map);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值