将ArrayList添加到另一个然后清除它然后重置新的吗?

时间:2013-06-23 09:59:28

标签: java arraylist

我知道标题是误导性的,但这是我能做的最好的。这是我的情况

public static ArrayList<Monster> wave = new ArrayList<Monster>();
public static ArrayList<ArrayList<Monster>> waves = new ArrayList<ArrayList<Monster>>();
...
for(int i = 0; i < 2; i++){
    while(condition){
        //Add elements to the wave ArrayList
    }
    waves.add(wave); //IMPORTANT
    wave.clear();    //LINES
}

所以这是我的问题;当我向wave添加wave时,它会在内存中创建它的副本,还是会将内存中的精确波传递给新的ArrayList?我问的原因是,我担心,在添加之后清除wave ArrayList可能会导致waveList中的数据丢失

4 个答案:

答案 0 :(得分:3)

wave传递给新的ArrayList构造函数,以便对其进行深层复制:

waves.add(new ArrayList<Monster>(wave));
wave.clear();

如果Monster类包含非基本字段,则可能还需要对其进行深层复制。

答案 1 :(得分:2)

它将通过原始列表。它不会创建副本。

如果你想创建一个副本,你必须自己做,例如

waves.add(new ArrayList<Monster>(wave));

注意不会复制列表(怪物)的值。

答案 2 :(得分:1)

您需要了解在添加wawe到wave时添加其引用的引用是什么。当您清除波浪时,波浪中的波浪也将被清除。

答案 3 :(得分:1)

在Java中传递Object时,总是传递引用。 因此,您添加到Waves的Wave Array与Wave中的数组完全相同。

当你clear() Wave时,你也清除了Waves中的对象,因为它们是相同的对象。