从循环中保存集合中的对象

时间:2014-03-30 08:05:21

标签: java list generics collections arraylist

请告诉我如何纠正这个问题?我从while循环中添加了一个集合中的同一个对象,它复制了数据。

  public class CollectionsFramework {
    private String name;
    private int id;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    private List<CollectionsFramework> listOfString = new ArrayList();

    public void setListOfString(List<CollectionsFramework> listOfString) {
        this.listOfString = listOfString;
    }
    public List<CollectionsFramework> getListOfString() {
        return listOfString;
    }   


    public static void main(String[] args) {
        CollectionsFramework c = new CollectionsFramework();
        int i = 0;
        while(i<5) {

            c.setId(1+i);
            c.setName("abc" + i);

            c.print();

            c.getListOfString().add(c);

            i++;

        }

        for (CollectionsFramework c1 : c.getListOfString()) {
            System.out.println(c.print());
        }


    }

    private String print() {

        return this.getName() + "   " + this.getId() + ";";
    }

}

为此,我得到输出为:     abc4 5;     abc4 5;     abc4 5;     abc4 5;     abc4 5;

虽然它应该是:     abc0 1;     abc1 2;     abc2 3;     abc3 4;     abc4 5;

1 个答案:

答案 0 :(得分:1)

您每次在循环中使用相同的对象,并且每次重写其值时,它将打印已设置的最后一个值。

因此,每次在while循环内尝试声明一个新对象。

while(i<5) {
    CollectionsFramework c = new CollectionsFramework();
    // code.
}