List循環添加數據覆蓋問題


 

問題: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()內)

給我點贊鴨!


 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM