将相同的对象添加到多个阵列列表
我正在开发一款游戏,并注意到向两个阵列列表添加一个对象,然后更新其中一个对象并不会更新其他对象。有没有可能解决这个问题?将相同的对象添加到多个阵列列表
我有一个所有的瓷砖列表,虽然渲染时是循环的。但我也想在我的库存类中插入一列插槽(扩展Tile),而不是通过所有游戏切片循环来获取库存插槽。
我有两个列表:Game.tiles和Inventory.slots
这是我补充的槽(Inventory类):
for(int i = 0; i< 16; i++){
Slot slot = new Slot();
Game.tiles.add(slot);
slots.add(slot);
}
而这正是我修改插槽(Inventory类):
for(int i = 0; i< 16; i++){
slots.get(i).visable = false;
}
问题是数据更新槽列表中的槽而不是Game.tiles列表中的同一槽。
创建一个对象实例,将其添加到两个阵列。然后这些数组将具有相同的引用。这意味着更新你的对象会导致它在两个数组中更新。
当您将对象添加到两个不同的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
}
}
我已经改变的代码本,但它仍然似乎不工作:'用于(INT I = 0; I MCrafterzz
您正在为'Game.tiles'和'slots'添加16个不同的'Slot'对象。假设您修改槽对象5,它将反映在这两个列表中。这不是和你一起发生的吗? – VHS
没有不幸的不是。也许这是第一个列表是瓦片,第二个是插槽?如果我编辑Game.tiles列表,然后它影响渲染,但不是如果我更改插槽列表。编辑:我测试了System.out.println(Game.tiles.get(i + 2).visable +“,”+ slots.get(i).visable);他们真的有不同的数据(+2,因为有两个其他瓷砖) – MCrafterzz
添加相同实例同时数组列表? – nbokmans
nope ...如果对象相同,那么你在每个列表中都有它的引用....修改列表A中的对象将影响唯一的一个实例...发布代码 –
告诉我们你在做什么... –