问题:java开发时,当我们使用List.add();循环添加数据,有时会出现前面添加的数据会被后面覆盖的现象。这是怎么回事尼?

会覆盖数据的代码

package com.boot.test;

import lombok.Data;
import java.util.ArrayList;
import java.util.List; @Data
public class StudentVo {
private String name;
private String age; public static void main(String [] args){
List<Student> students = new ArrayList<Student>();
students.add(new Student("a","1"));
students.add(new Student("b","2")); for(int i=0;i<students.size();i++){
System.out.println(students.get(i));
}
System.out.println("--------------------------------"); List<StudentVo> studentLists = new ArrayList<StudentVo>();
/**下面是重点 对象在这里创建时会覆盖数据*/
StudentVo studentVo = new StudentVo();
for(int j=0;j<students.size();j++){
studentVo.setName(students.get(j).getName());
studentVo.setAge(students.get(j).getAge());
studentLists.add(studentVo);
}
/**打印结果*/
for(int k=0;k<studentLists.size();k++){
System.out.println(studentLists.get(k));
}
}
} console:

不会覆盖数据的代码

package com.boot.test;

import lombok.Data;
import java.util.ArrayList;
import java.util.List; @Data
public class StudentVo {
private String name;
private String age; public static void main(String [] args){
List<Student> students = new ArrayList<Student>();
students.add(new Student("a","1"));
students.add(new Student("b","2")); for(int i=0;i<students.size();i++){
System.out.println(students.get(i));
}
System.out.println("--------------------------------");
List<StudentVo> studentLists = new ArrayList<StudentVo>(); for(int j=0;j<students.size();j++){
/**此时对象在这里创建 不会覆盖数据*/
StudentVo studentVo = new StudentVo();
studentVo.setName(students.get(j).getName());
studentVo.setAge(students.get(j).getAge());
studentLists.add(studentVo);
}
/**打印结果*/
for(int k=0;k<studentLists.size();k++){
System.out.println(studentLists.get(k));
}
}
}
console:

总结:会出现这两种不同结果的原因是 对象创建位置的不同导致。 程序一 整个执行过程中只创建了一个对象,所以数据会被后面的覆盖。程序二 执行过程中创建了多个对象,数据互不干扰,所以数据不会被覆盖。
所以创建实体类对象的位置是导致该问题的根本原因(要在for()内) 给我点赞鸭!
												

List循环添加数据覆盖问题的更多相关文章

  1. Android及java中list循环添加时覆盖的问题-20171021

    鉴于新浪博客太渣,转到这来. 最近在工程设计时,使用list循环添加map对象发现,最终全部变为最后一个map的值,但是list的数值还是正确的,也就是说添加了N(list长度或者说循环的次数)个相同 ...

  2. Oracle For 循环添加数据

    自己亲自使用的,绝对OK --添加数据declare i number; --用for实现 begin for i in 0 .. 500 loop insert into cust(custsn,t ...

  3. MySQL存储过程循环添加数据

    经常需要测试数据,写个存储过程方便日后使用. DROP PROCEDURE IF EXISTS add_member; DELIMITER $$ CREATE PROCEDURE add_member ...

  4. SQL语句の循环添加数据

    declare @i intset @i=1while @i<=1000begininsert into News_ITM(title,msg,subDateTime,author,imageP ...

  5. Mysql数据库中 ,涉及事物,循环添加数据

    ),),   ) BEGIN declare cnt ; declare i ; declare growthid ; DECLARE t_error INTEGER DEFAULT ;  DECLA ...

  6. MVC3循环添加数据

    foreach (var item in orderdetails) { var billdetails = new BillDetail(){BillCode = billoflading.Bill ...

  7. 多线程操作(循环往listbox中添加数据)

    一.先造一个窗体,其中就开始按钮,暂停按钮,以及listbox文本框 二.当点击开始的时候,数据会无限的往listbox中加,为了防止卡住和提升效率,便造了一个新的线程来执行开始操作 namespac ...

  8. 点滴笔记(一):for循环ajax请求添加数据

    项目里遇到循环添加数据,添加多条数据到主表后,还要根据每条主表数据主键ID添加到子表里,于是想到post提交 发现循环post没效果,也没async参数.. 于是用ajax里面有async设置了fal ...

  9. 一个selenium简单案例自动添加数据

    //本来想着用execl来录入数据的,但是为了尽快完成所以直接搞了个数组 package aldtest; import org.openqa.selenium.*; import org.openq ...

随机推荐

  1. java 第三次课后作业

    1.java字段初始化的规律 public class gouzao { public static void main(String[] args) { test te=new test(); Sy ...

  2. [运维] 如何解决 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

    环境: 虚拟机 linux centos 7 64 当时正在配置 nginx , 由于解压后的 nginx 默认安装位置是在 /usr/local/ 目录下, 而这个目录是 root 用户才有权限操作 ...

  3. Centos 下安装php

    1 从php 官网下载源安装包 http://php.net/downloads.php // 安装php 扩展 2 yum install libxml2 libxml2-devel openssl ...

  4. iOS开发-真机调试遇到“The executable was signed with invalid entitlements.

    https://www.jianshu.com/p/635574a8ab0e 如果是真机运行relase版 1.Edit Scheme中改成relase 2.更改签名为   自动签名

  5. vim功能之替换和查找

    vim有着强大的替换和查找功能,若能进行熟练的运用,可以让工作效率得到一个很大程度的提高. 替换 语法:[addr]s/源字符串/目的字符串/[option] [addr]表示检索范围,如: &quo ...

  6. 5-3 使用antDesign的form组件

    import { Form, Icon, Input, Button, Checkbox } from 'antd'; class NormalLoginForm extends React.Comp ...

  7. 从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp

    P90 .1-从零构建和部署去中心化投票App-01 P91 .2-从零构建和部署去中心化投票App-02 P92 .3-从零构建和部署去中心化投票App-03 参考博文:http://liyuech ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:多行代码带有滚动条

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. CSS概述(最详细!!!)

    一.先综述 二.分述: 1.简介: 2.基本用法 3.引入方式: 4.盒模型         5.选择器:   6.常见文本样式及复合样式       7.改变行.块元素的属性: 8.标签显示与隐藏: ...

  10. 刷题56. Merge Intervals

    一.题目说明 题目是56. Merge Intervals,给定一列区间的集合,归并重叠区域. 二.我的做法 这个题目不难,先对intervals排序,然后取下一个集合,如果cur[0]>res ...