如何向arraylist添加元素

时间:2014-08-24 05:30:55

标签: java arraylist

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

在执行上述程序时,我并没有理解为什么第二个元素也替换第一个元素。请帮我解决这个问题? 将元素添加到数组列表

的问题

5 个答案:

答案 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;

}