向List中添加map被覆盖

1.这里放入list里的是不同的map,虽然map d是同一个map,但是指向了不同的地址(猜测)

    public static void main(String argv[]) {
        List<Map> aList = new ArrayList<>();
        Map a = new HashMap<>();
        Map b = new HashMap<>();
        Map c = new HashMap<>();
        a.put("a", 1);
        b.put("a", 2);
        c.put("a", 3);
        aList.add(a);
        aList.add(b);
        aList.add(c);

        System.out.println(aList);

        List<Map> bList = new ArrayList<>();
        Map d = new HashMap<>();
        for (int i = 0; i <= 2; i++) {
            d = aList.get(i);
            d.put("b", i);
            bList.add(d);
        }
        System.out.println(bList);

    }
[{a=1}, {a=2}, {a=3}]
[{a=1, b=0}, {a=2, b=1}, {a=3, b=2}]

2.由于用的是同一个amap,所以导致list数据全被覆盖

    public static void main(String argv[]) {
        
        Map<String,Object> amap = new HashMap<>();
        List<Map<String,Object>> alist = new ArrayList<>();
        for(int i=0;i<3;i++){
    //      amap=new HashMap<>();
            amap.put("a", i);
            amap.put("b", i);
            alist.add(amap);
        }
        System.out.println(alist);

        Map bmap = new HashMap<>();
        for(int i = 0;i<alist.size();i++){
            bmap = alist.get(i);
            bmap.put("hehe",i);
        }
        System.out.println(alist);
        
    }
[{a=2, b=2}, {a=2, b=2}, {a=2, b=2}]
[{hehe=2, a=2, b=2}, {hehe=2, a=2, b=2}, {hehe=2, a=2, b=2}]

3.这里第二个for循环最容易造成迷惑,明明每次for循环都是新建了一次bmap,然后数据还是被覆盖掉,因为amap的地址是唯一的(猜测)

 public static void main(String argv[]) {

        Map<String,Object> amap = new HashMap<>();
        List<Map<String,Object>> alist = new ArrayList<>();
        for(int i=0;i<3;i++){
          //amap=new HashMap<>();
            amap.put("a", i);
            amap.put("b", i);
            alist.add(amap);
        }
        System.out.println(alist);

        for(int i = 0;i<alist.size();i++){
            Map bmap = new HashMap<>();
            bmap = alist.get(i);
            bmap.put("hehe",i);
        }
        System.out.println(alist);

    }
[{a=2, b=2}, {a=2, b=2}, {a=2, b=2}]
[{a=2, b=2, hehe=2}, {a=2, b=2, hehe=2}, {a=2, b=2, hehe=2}]

4在第一次for循环中每次都new一个Map,则不会被覆盖

   public static void main(String argv[]) {
        Map<String,Object> amap = new HashMap<>();
        List<Map<String,Object>> alist = new ArrayList<>();
        for(int i=0;i<3;i++){
            amap=new HashMap<>();
            amap.put("a", i);
            amap.put("b", i);
            alist.add(amap);
        }
        System.out.println(alist);

        for(int i = 0;i<alist.size();i++){
            Map bmap = new HashMap<>();
            bmap = alist.get(i);
            bmap.put("hehe",i);
        }
        System.out.println(alist);

    }
[{a=0, b=0}, {a=1, b=1}, {a=2, b=2}]
[{a=0, b=0, hehe=0}, {a=1, b=1, hehe=1}, {a=2, b=2, hehe=2}]






猜你喜欢

转载自blog.csdn.net/xyy1028/article/details/80595559