热门标签 | 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);

}



推荐阅读
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 深入解析ArrayList与LinkedList的差异
    本文详细对比了Java中ArrayList和LinkedList两种常用集合类的特性、性能及适用场景,通过代码示例进行测试,并结合实际应用场景分析其优缺点。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • ------------------------------————————————————————————————1.定义一个类,实现与被增强对象相同的接口2.在类中定义一个对象,记住被增强 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 本文详细介绍了装饰者(Decorator)模式,这是一种动态地为对象添加职责的方法。与传统的继承方式不同,装饰者模式通过组合而非继承来实现功能扩展,从而提供更大的灵活性和可维护性。 ... [详细]
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社区 版权所有