PROG1:
public class TestArrayList {
ArrayList<TestVO> list=new ArrayList<TestVO>();
TestVO test5=new TestVO();
public ArrayList<TestVO> getArrayList2() {
test5.setName("jagadeesh");
test5.setPhnNo("123456789");
list.add(test5);
test5.setName("Prasana");
test5.setPhnNo("987456321");
list.add(test5);
return list;
}
}
PROG2:
public class TestVO {
String name;
String phnNo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhnNo() {
return phnNo;
}
public void setPhnNo(String phnNo) {
this.phnNo = phnNo;
}
}
PROG3:
public class TestMain {
public static void main(String[] args) {
TestArrayList aList=new TestArrayList();
ArrayList<TestVO> test=aList.getArrayList2();
for (TestVO testVO : test) {
System.out.println("name is: "+testVO.getName());
System.out.println("name is: "+testVO.getPhnNo());
}
}
}
输出:
name is: Prasana
name is: 987456321
name is: Prasana
name is: 987456321
在执行上述程序时,我并没有理解为什么第二个元素也替换第一个元素。请帮我解决这个问题? 将元素添加到数组列表
的问题答案 0 :(得分:1)
在getArrayList2(){}中创建一个新对象 像这样的东西
public ArrayList<TestVO> getArrayList2() {
TestVO test5=new TestVO();
test5.setName("jagadeesh");
test5.setPhnNo("123456789");
list.add(test5);
TestVO test6=new TestVO();
test6.setName("Prasana");
test6.setPhnNo("987456321");
list.add(test6);
return list;
}
或者
TestVO test =null;
public ArrayList<TestVO> getArrayList2() {
test = new TestVO();
test.setName("jagadeesh");
test.setPhnNo("123456789");
list.add(test);
test = new TestVO();
test.setName("Prasana");
test.setPhnNo("987456321");
list.add(test);
return list;
}
当你喜欢你正在做的事情时,将名称phoneNo设置为对象并将对象添加到列表中以前的值被覆盖
答案 1 :(得分:1)
您正在重复使用同一个对象并将其添加到列表中两次,因此列表中的所有(两个)对象都是相同的。 你应该为每一轮创建一个新的:
public ArrayList<TestVO> getArrayList2() {
TestVO t = new TestVO();
t.setName("jagadeesh");
t.setPhnNo("123456789");
list.add(t);
t = new TestVO(); // Note the new object creation
t.setName("Prasana");
t.setPhnNo("987456321");
list.add(t);
return list;
}
答案 2 :(得分:0)
那是因为你使用的是同一个实例。 (你在两个时间都使用test5实例。因此只有一个实例)
test5.setName("jagadeesh");
test5.setPhnNo("123456789");
list.add(test5);
test5.setName("Prasana");
test5.setPhnNo("987456321");
list.add(test5);
而不是创建一个新实例并将其添加到ArrayList
答案 3 :(得分:0)
修改getArrayList2(),如下所示:
public ArrayList getArrayList2(){
test5.setName("jagadeesh");
test5.setPhnNo("123456789");
list.add(test5);
test5=new TestVO();
test5.setName("Prasana");
test5.setPhnNo("987456321");
list.add(test5);
return list;
}
这可能会按预期工作。
将Object添加到ArrayList或任何集合时,它不像是创建和插入新副本。插入对象的引用。如果对象的任何属性在之前插入任何列表时发生了更改,则在从列表中访问它们时会获得更改。在您的代码中,您将“test5”添加到列表中,然后更改名称和phnno。但是你没有创建新对象。所以旧的改变了。并且您的列表中有两个相同对象的副本。感谢。
答案 4 :(得分:0)
您正在向ArrayList&lt;&gt;添加对象引用,因此您必须为每个数据记录创建一个新实例。
public ArrayList<TestVO> getArrayList2() {
TestVO test5 = new TestVO(); // Create new instance
test5.setName("jagadeesh"); // Set name
test5.setPhnNo("123456789");
list.add(test5); // Add object reference to list
test5 = new TestVO(); // Create new instance
test5.setName("Prasana"); // Set name
test5.setPhnNo("987456321");
list.add(test5); // Add object reference to list
return list;
}