热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java中的add()_java中list.add()方法中的小细节

list.add()中的小细节最近在码代码的时候发现一个有趣的list问题,就是list中的add()方法和list中的add()方法会有点区别。前者是和预想的一样&

list.add()中的小细节

最近在码代码的时候发现一个有趣的list问题,就是list中的add()方法和list中的add()方法会有点区别。

前者是和预想的一样,就是给集合按顺序添加元素,而后者在添加的时候会覆盖前面的元素。

例如:

list

public static void main(String[] args){

List list = new ArrayList();

list.add("第一个元素");

list.add("第二个元素");

list.add("第三个元素");

list.add("第四个元素");

//list.remove(1);

//通过foreach方式遍历所有元素

for (String element : list){

System.out.println("foreach遍历:" + element);

}

运行结果

a2b80b5f8b025a27990c33a5d39f9ef0.png

list

List cats = findCatByCatId(catid);

CatInfoDto catInfoDto = new CatInfoDto();

List catInfoDtos &#61; new ArrayList<>();

for (Cat cat : cats){

catInfoDto.setCatid(cat.getId());

catInfoDto.setCatname(cat.getCatname());

catInfoDtos.add(catInfoDto);

}

每一次遍历&#xff0c;list中的内容都会被新的cat覆盖

查询资料发现&#xff0c;转递给add()方法的是catInfoDto类的引用&#xff0c;是一个内存地址&#xff0c;所以定义在外部for循环外部的对象的引用&#xff0c;在for循环的时候没有改变内存地址&#xff0c;所以添加到list的是同一个对象的地址&#xff0c;所以每次add都会覆盖掉前面的内容。

如果想不覆盖的话&#xff0c;在for循环内部再重新new一个catInfoDto类对象即可&#xff0c;这样每次循环都会重新在内存中开辟一段空间

List cats &#61; findCatByCatId(catid);

CatInfoDto catInfoDto &#61; new CatInfoDto();

List catInfoDtos &#61; new ArrayList<>();

for (Cat cat : cats){

catInfoDto &#61; new CatInfoDto();

catInfoDto.setCatid(cat.getId());

catInfoDto.setCatname(cat.getCatname());

catInfoDtos.add(catInfoDto);

}



推荐阅读
author-avatar
七楼居民_651
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有