Java循环中List添加元素把前面的元素被覆盖问题

导读:本篇文章讲解 Java循环中List添加元素把前面的元素被覆盖问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在一次写代码中发现返回的集合都是都是一样的数据,看了后台代码才发现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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!