请告诉我如何解决该问题?我在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;

最佳答案

您每次在循环内以及每次覆盖其值时都使用同一个对象,因此它将打印已设置的最后一个值。

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

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

09-11 20:31