最后结果怎么会一样,没有明白

  class Role {
    private String rolepro;
    private String name;
  }

  class RoleList {
    private HashMap<String,Role> map;
  }

        ArrayList<RoleList> list=new ArrayList<>();
        HashMap<String,Role> templateMap=new HashMap<>();
        Role obj = new Role();
        obj.setRolepro("ADC");
        obj.setName("射手");
        templateMap.put("ADC",obj);

        Role obj2 = new Role();
        obj2.setRolepro("BP");
        obj2.setName("法师");
        templateMap.put("BP",obj2);

        Role obj3 = new Role();
        obj3.setRolepro("QC");
        obj3.setName("打野");
        templateMap.put("QC",obj3);
        //traverse
        for (int i = 0; i < 3; i++) {
            HashMap<String, Role> map = new HashMap<>();
            map.putAll(templateMap);
            map.get("ADC").setName("射手"+i);
            map.get("BP").setName("法师"+i);
            map.get("QC").setName("打野"+i);

            RoleList listObj = new RoleList();
            listObj.setMap(map);
            list.add(listObj);
        }
        System.out.println(list);
        System.out.println(list.size());

img

img

不明白的地方时为什么添加的三个对象属性信息都是相同吧?

listObj.setMap(map);

对象设置属性,每次只会保存最后一个啊.就好比说 student.setName();可以多次设置值,但是只会保存最后一次.可以理解为给这个学生设置姓名,可以叫他小白,想了想不好还是叫小红好,所以最后这个学生叫小红.这样将明白吗?
如有帮助,欢迎采纳!

实际上你就创建了三个Role对象,循环中对map的处理都是对这三个对象的处理,map中记录的是这三个对象的引用