`

往List中添加对象的时候前面的数据总被最后加入的覆盖

阅读更多

最近在写接口的时候用到了List,但是发现每次输出的结果都是同一条数据,而且是最后一题。看了下查询出来的结果,都是正确的,经过一步步调试发现在将查出来的结果放到List的时候出了问题。

   File fileinfo=new File();
   ArrayList<File> list=new ArrayList<File>();
  
   FileStatus[] status2 = fs.listStatus(path);  
   Path[] listedPaths = FileUtil.stat2Paths(status2);
   ...
   for (Path p : listedPaths) {
     fileinfo.setFilesize(Integer.valueOf(String.valueOf(filesize)));
     fileinfo.setAuthority(tempfs.getPermission().toString());
     ...
     list.add(fileinfo);
   }

 fileinfo是一个对象,for循环第一次为他设置了一些值,然后将这个对象添加到List中。List里面现在存放了一个该对象;

接着进行第二次循环,要注意,File fileinfo=new File();是在for循环外面,也就是说,我们用的还是第一次用的那个对象。因为是同一个对象,所以用的是同一个内存空间,后面的内容会覆盖前面的内容,所以现在该对象的值已经是现在的新的内容,当最后把这个对象放到List的时候,其实是将同一个对象又放了一遍,而且这个对象的内容已经发生改变(最后一次加进去的内容)。
所以第二次循环之后,该List里面是已经有两个对象了,但是这两个对象其实是同一个对象(可以理解为添加了两遍),其内容是一致的。
解决方法:就是每次循环创建一个对象,然后将对象添加到List中即可。
即每次循环都创建一个File对象:
   File fileinfo=new File();
   ...
   for (Path p : listedPaths) {
     fileinfo=new File();
     ...
     list.add(fileinfo);
   }
 
分享到:
评论

相关推荐

    c#list添加数据

    标题“c#list添加数据”指的是如何向已经实例化的`List&lt;T&gt;`对象中添加数据。描述中提到“list&lt;&gt;.count==0”的情况,即列表为空时,需要向列表中添加数据。下面我们将详细讲解如何操作。 首先,我们来看代码中的`...

    关于Java中List对象的分页思想-按10个或者n个数对list进行分组

    Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n个。这种技术可以用于解决大规模数据的处理问题,例如批量...

    Python中循环后使用list.append()数据被覆盖问题的解决

    主要给大家介绍了关于Python中循环后使用list.append()数据被覆盖问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    list去掉重复对象

    一个list里面有多个对象,对象有几个字段,要求在对象里面不要有重复的数据的实现。

    两个list比较 取不同的对象

    ### 两个List比较取不同的对象 在Java编程中,经常需要对两个`List`进行比较,找出它们之间的差异。这通常涉及到数据结构的理解、算法设计以及编程实现等多个方面。本文将详细探讨如何通过一个示例代码来理解如何...

    java 中如何从LIST 对象取值

    本文将深入探讨如何从List对象中获取数据,包括使用不同类型的List实现以及从List中提取特定值的方法。我们将通过示例代码来理解这些概念,同时也会涉及到与List相关的常见操作。 ### 一、List的基本概念 在Java中...

    JSON--List集合转换成JSON对象详解

    文中通过遍历List集合中的每个元素,手动创建JSONObject并填充数据,最后将JSONObject添加到JSONArray中。这是一种基础且灵活的转换方式。 2. 使用第三方库进行转换: 在上述代码中,使用了org.json库中的...

    ListCtrl 数据修改 添加 删除

    最后,为了使ListCtrl与ComboBox交互,你可能需要在ComboBox的下拉列表中添加或移除项目,这可以通过AddString或DeleteString函数实现。同时,当用户在ComboBox中选择一项时,可以通过设置ListCtrl的项来更新显示。 ...

    ArrayList数据批量添加数据

    ### ArrayList数据批量添加数据 #### 知识点概述 在.NET框架中,`ArrayList`类是一种动态数组,用于存储不同类型的数据。本篇文章将详细介绍如何利用`ArrayList`进行数据的批量添加,并通过一个示例来展示如何在一...

    java中List对象列表实现去重或取出及排序的方法

    Java中List对象列表实现去重或取出及排序的方法 在Java中,对List对象列表实现去重或取出及排序是一种常见的操作。下面将详细介绍相关的方法和实现。 1. 实体类重写equals和hashCode方法 在Java中,想要去重List...

    MFC在ListCtrl中加入Button

    本文将详细介绍如何在MFC的ListCtrl中加入Button。 首先,我们需要了解ListCtrl的基本用法。ListCtrl通常有两种视图模式:报告视图和图标视图。在报告视图中,ListCtrl以表格的形式展示数据,更适合显示多列信息;...

    去掉list中的重复对象

    "去掉list中的重复对象"这个话题是一个常见的需求,特别是在处理业务数据时,确保数据的唯一性至关重要。这篇博客文章《去掉list中的重复对象》可能是探讨了如何在Java中有效地实现这一功能。 在Java中,List接口...

    C# 修改list所有对象中的某字段

    在C#编程中,我们经常需要操作集合,如List,进行数据的增删改查。本主题聚焦于如何修改List中所有对象的某个特定字段。Lambda表达式和ForEach方法是实现这一目标的常用工具。下面将详细介绍这两种方法。 **Lambda...

    从数据库添加数据到ListCtrl中AddData

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架与ADO(ActiveX Data Objects)技术将数据库中的数据添加到ListCtrl控件中。标题"从数据库添加数据到ListCtrl中AddData"和描述指出,这是...

    将数据库中的数据表添加到ListControl控件

    2. **执行查询**:通过SqlCommand对象,我们可以编写SQL查询语句,获取需要显示在ListControl中的数据表。例如,`SELECT * FROM TableName` 可以获取表中的所有数据。 3. **填充DataTable**:使用SqlCommand的...

    在Java 8中将List转换为Map对象方法

    在Java 8中,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8中将List转换为Map对象的方法,并提供了多种实现方式。 首先,我们需要明确Map的key是什么?在这...

    C#将List对象转换为BMP图片保存

    在C#编程中,将一个`List&lt;T&gt;`对象转换为BMP图片并保存到本地是一项常见的数据可视化任务,尤其在处理大量数据时。这个过程涉及到多个步骤,包括数据的渲染、图像创建以及文件保存。以下将详细介绍这个过程,以及相关...

    ajax传递list对象数组

    - **data**:发送给服务器的数据,这里就是前面构建的`_list`对象。 - **dataType: 'json'**:指定预期从服务器返回的数据类型。 - **success**:成功回调函数,当请求成功时执行。 #### 五、后端接收List对象数组 ...

    基于MFC实现list列表通过下拉框改变数据

    在本文中,我们将深入探讨如何基于Microsoft Foundation Class (MFC) 库来实现一个功能,即通过下拉框(ComboBox)来改变List控件(CListCtrl)中的数据。MFC是微软提供的一种用于开发Windows应用程序的C++类库,它...

Global site tag (gtag.js) - Google Analytics