java如何正确地将引用从一个Arraylist传输到另一个Arraylist
我正在做一个扑克牌游戏,似乎有一个与ArrayList的问题 我有一张arraylist,上面有游戏中所有可用的牌, 以及另一个播放列表,其中包含用户选择使用的卡
第二个arraylist开始为空,当用户开始从第一个arraylist中拾取卡片时,该卡片将被传输到第二个播放列表中
问题是,如果用户选择了两张相同的卡,那么一张卡的情况也会发生在另一张卡上。所以,假设用户选择了两张名为“超人”的卡片。当一个超人的健康下降时,另一个也会下降
我的代码如下所示,用于将卡添加到choosen卡:
//choosenCards is the arraylist of cards that the user chooses
//cards is the arraylist of available cards
choosenCards.add(cards.get(index));
# 1 楼答案
“添加”这样的卡片实际上只是添加了一个指向原始对象的引用。你想要的可能是一个“深度副本”(因此你可以从原始版本中获得两个独立的版本)
使用
choosenCards.add((Class of the card object) cards.get(index).clone());
(Class of the card object)
的原因是Object.clone()
返回一个Object
,然后需要将其转换为正确的类型# 2 楼答案
如果需要从
cards
转移到choosenCards
,则需要使用remove(index)请注意,从卡中移除卡后,最大可用索引比之前少一个
您可以编写代码,将卡添加到
choosenCard
,但不会从cards
中删除