在for循环中添加日历导致ArrayList覆盖以前的值

时间:2016-02-26 13:38:38

标签: java android arraylist calendar

来自tempC的值已正确生成(已调试),但在插入"天" list(已经尝试过简单的Array,Linked List和ArrayList),它们会覆盖以前的值并添加新的值。

让我说明一下:

  

- > "天"有一个日历的值为03/26/2016
   - >一个新的价值" 04/25/2016"被添加到集合中    - > "天"现在有两个日历,但不是" 03/26/2016"和" 04/25/2016"他们有价值观" 04/25/2016"和" 04/25/2016"
   - >每次迭代都会像这样继续,总是添加新的日历并用新的日历覆盖所有以前的日历

以下是代码段:

public LinkedList<Calendar> days = new LinkedList<Calendar>();

private void calculateCreditReturn(){
    Calendar tempC = Calendar.getInstance();
    for(int x=0; x<parcels; x++){
        tempC.add(Calendar.DAY_OF_YEAR, 30);
        days.add(tempC);
    }
}

2 个答案:

答案 0 :(得分:0)

您正在列表中添加相同的对象。

在你的情况下:

tempC -> 03/26/2016
list = [tempC]
Change tempC: tempC -> 04/25/2016
list = [tempC, tempC]

因此,基本上,您必须先创建另一个Calendar对象,然后再将其添加到列表中。

答案 1 :(得分:0)

使用此:

public LinkedList<Calendar> days = new LinkedList<Calendar>();

private void calculateCreditReturn(){

   Calendar tempC = Calendar.getInstance();
    for(int x=0; x<10; x++){
        tempC.add(Calendar.DAY_OF_YEAR, 30);
        Calendar forStore = (Calendar) tempC.clone();
        days.add(forStore);
    }
}

我们创建了一个名为forstore的克隆,而不是存储tempC,我们将其存储在列表中。