1

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

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?我要问的原因是,恐怕,在添加后清除 wave ArrayList 可能会导致 wave ArrayList 中的数据丢失

4

4 回答 4

3

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

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

如果Monster类包含非原始字段,您可能也必须深度复制这些字段。

于 2013-06-23T10:04:46.867 回答
2

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

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

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

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

于 2013-06-23T10:01:12.723 回答
1

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

于 2013-06-23T10:01:43.260 回答
1

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

当您使用clear()Wave 时,您也清除了 Waves 中的对象,因为它们是同一个对象。

于 2013-06-23T10:06:17.467 回答