将相同的对象添加到多个arraylists

时间:2017-03-09 16:30:23

标签: java arrays

我正在开发游戏并注意到向两个arraylists添加一个对象然后更新其中一个并不会更新另一个。有可能解决这个问题吗?

我有一个列表,列出了渲染时循环的所有图块。但我还想在我的库存类中找到一个插槽列表(扩展Tile),而不是循环遍历所有游戏磁贴以获得库存插槽。

我有两个列表:Game.tiles和Inventory.slots

这是我添加插槽(库存类)的地方:

for(int i = 0; i< 16; i++){
Slot slot = new Slot();
Game.tiles.add(slot);
slots.add(slot);
}

这是我修改插槽(库存类)的地方:

for(int i = 0; i< 16; i++){
slots.get(i).visable = false;
}

问题是插槽列表中插槽的数据更新,但Game.tiles列表中的插槽没有。

完整广告资源类:http://pastebin.com/KS5BNB3F

2 个答案:

答案 0 :(得分:1)

将对象添加到两个不同的ArrayList时,实际上只添加了对象的引用。因此,如果您修改对象,它将同时反映在两个列表中。请参阅以下代码段:

public class Clazz{
   private Integer d = 0;
   public static void main(String[] args) throws Exception {
       Clazz obj = new Clazz();
       List<Clazz> list1 = new ArrayList<Clazz>();
       List<Clazz> list2 = new ArrayList<Clazz>();
       list1.add(obj);
       list2.add(obj);
       obj.d = 15;
       System.out.println(list1.get(0).d); //prints 15
       System.out.println(list2.get(0).d); //prints 15
   }
}

答案 1 :(得分:-1)

创建一个对象实例,将其添加到两个数组中。那些数组将具有相同的引用。这意味着更新对象会导致在两个数组中更新它。