在一次写代码中发现返回的集合都是都是一样的数据,看了后台代码才发现list添加那里有问题,不多说,上代码:
错误代码示例
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();//我把map新建在了循环外
String value = "";
//遍历获取汽车类型集合的key
for(String key:PlatformUtil.getCodeMap("CarTypeCode").keySet()){
//获取value
value = PlatformUtil.getCodeMap("CarTypeCode").get(key).toString();
map.put("value",key);
map.put("label",value);
list.add(map);
System.out.println(list);
}
return list;
输出可以看到, 每一次循环我list前面的内容都被覆盖了
为了节约java内存,我把map直接在循环外new好,防止他每次循环都要new一次而导致浪费空间,后来发现错了!!
原因:
因为ArrayList
集合里存放的是一个对象的引用
。如果我把map对象new在循环外, 那么每次我改变map的时候只改变了他的内容, 而引用并没有发生改变,所以在改变map对象时,list之前添加的也会一起改变。所以我们应该把map new在循环的里面, 每次创建都有一个新的引用
正确代码示例:
List<Map<String, Object>> list = new ArrayList<>();
String value = "";
//遍历获取汽车类型集合的key
for(String key:PlatformUtil.getCodeMap("CarTypeCode").keySet()){
//要在循环内创建对象不然list添加会覆盖之前的内容
Map<String, Object> map = new HashMap<>();
//获取value
value = PlatformUtil.getCodeMap("CarTypeCode").get(key).toString();
map.put("value",key);
map.put("label",value);
list.add(map);
System.out.println(list);
}
return list;
输出可以看到list之前都对象都没有被覆盖了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98674.html