2014-12-21 117 views
-2

我不知道为什么这个代码不工作:ArrayList中删除对象

,所以我们有一个卡阵列:

Card[] hand = new Card[2]; 

其中包含两张牌,如:

hand[0]=new Card("King","Hearts"); 
hand[1]=new Card("Ace","Hearts"); 

然而,当我尝试时:

ArrayList<Card> deck = new ArrayList<Card>(); 

这里//其他方法填充有52张牌

然后在甲板上:

deck.remove(hand[0]); 
deck.remove(hand[1]); 

然后出手没有删除

+0

你有两个不同的'ArrayList's。你从第一个移除,但期望它从第二个移除? – Maroun

+1

你的意思是“手没有被删除”?你的代码只会从甲板ArrayList中删除**一张**卡。你还应该考虑为你的问题的骨头提供更多的肉,以便我们能够回答它。 –

+4

你是否重写'Card'类中的'equals'方法?发布简短的例子,它会让我们重现您的问题。 – Pshemo

回答

1

看样子你是不是通过指定重写Object.equals方法在Card类作为平等标准的两个期望String s(等级和花色),这又意味着remove方法将返回false,并且不会删除Card

我也建议覆盖hashCode,虽然在这方面没有必要。

大多数IDE(例如Eclipse)都具有根据您所需的相等性标准生成这些方法的功能。

Here对于Java中的equals/hashCode合同而言,这是一个着名的(尚未争论的)SO问题。

+0

我刚刚通过创建两张卡片并使用.equals检查它们是否相等来运行简单测试,并且它工作正常。还有什么可能是错的? – John

+1

@John这是一个简短的测试:D – Mena

+0

谢谢,我在Card中的.equals类将它与一张卡片比较,而不是一个对象,因此它不是重写。 – John

1

ArrayList.remove内部使用equals来确定要删除哪个对象,因此您需要实现equals。

2

您只需要覆盖Object.equals方法,即确定两张卡片是否相同。如果您正在使用HashSetHashMap类,那么您还需要覆盖hashCode()方法。