关于Map地址引用的问题

124 阅读1分钟

题记

我现在遇到一个场景,需要把一个map放到list中,比如变成一个十条数据的list,其中大部分的数据是一样的,只有一个字段是不同的,如果只是建好一个map,去修改那某一个值,那最后整个List里的map的那个值都会是最后赋值的值,因为他们在内存中指向的地址都是一样的。

解决方案

网上找了很多,随便试了一个可以,就拿过来了,山不在高,有仙则灵。

map.putAll();

public static void main(String[] args) {
    Map<String,String> data = new HashMap<>();

    data.put("key1","123");
    data.put("key2","456");

    Map<String,String> newData = new HashMap<>();
    newData.putAll(data);
    data.put("key1","abc");
    System.out.println(data);
    System.out.println(newData);
}

结果:

{key1=abc, key2=456}
{key1=123, key2=456}

结论

其实再往下就是深拷贝和浅拷贝的问题了,目前我对这个的了解自认为不是很全面和正确,所以不做这块知识的分享,只是我个人认为其中最大的区别就是是否也拷贝引用地址