我知道标题是误导性的,但这是我能做的最好的。这是我的情况
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中的数据丢失
答案 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中的对象,因为它们是相同的对象。