ArrayList与HashMap踩的坑

1. 谬误的代码

package com.xrluo.type09;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class Demo3{    public static void main(String[] args)    {        ArrayList<Map<String, Object>> list = new ArrayList<>();        HashMap<String, Object> map = new HashMap<>();        /*            这个中央是不是能够了解为 list map都是指向一个内存的地址         */        map.put("key1","value1");        map.put("key2","value2");        /*            {key1=value1, key2=value2}            此处是不是能够了解为 把map的内存地址存入到list中         */        list.add(map);        /*            [{key1=value1, key2=value2}]         */        /*            此处持续操作的事map的内存地址中的数据,所以会替换了下面的数据         */        map.put("key1","value3");        map.put("key2","value4");        /*        list == [{key1=value3, key2=value4}]        */        list.add(map);        /*            list == [{key1=value3, key2=value4}, {key1=value3, key2=value4}]        */        System.out.println(list);        System.out.println(map);    }}

2. 正确写法

package com.xrluo.type09;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class Demo3{    public static void main(String[] args)    {        ArrayList<Map<String, Object>> list = new ArrayList<>();        HashMap<String, Object> map;        map = new HashMap<>();        map.put("key1","value1");        map.put("key2","value2");        list.add(map);        /*            [{key1=value1, key2=value2}]         */        map = new HashMap<>();        map.put("key1","value3");        map.put("key2","value4");        /*        list == [{key1=value1, key2=value2}]        */        list.add(map);        /*            list == [{key1=value1, key2=value2}, {key1=value3, key2=value4}]        */        System.out.println(list);        System.out.println(map);    }}