[英]Remove element from linked list JAVA
好的,这是我的问题。 我有一个卡片对象的链表。
我有以下方法
public void removeCard(Card card){
cards.remove(card);
}
如果我创建卡c =新卡(5,C); 例如
并且在链表中有一个卡的值2和C完全相同。
如果我调用CardPile.remove(card)方法
我没有得到任何错误,但是没有删除等于参数卡的元素。 任何想法为什么没有发生?
import java.util.LinkedList;
public class CardPile {
final char [] suit = {'C','D','H','S'};
final char [] rank = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
LinkedList<Card> cards;
public CardPile(){
cards = new LinkedList<Card>();
}
public void addCard(Card card){
cards.addLast(card);
}
public void removeCard(Card card){
cards.remove(card);
}
public void removeSpecial(Card card){
LinkedList<Card> temp = new LinkedList<Card>();
for(int i=0; i<cards.size(); i++){
if(cards.get(i).equals(card)){
temp.add(cards.get(i));
}
}
cards = temp;
}
public void listCards(){
for(int i=0; i<cards.size(); i++){
System.out.print(cards.get(i).toString()+" ");
}
System.out.println();
}
public boolean isEmpty(){
if(cards.size()==0)
return true;
else
return false;
}
public Card drawCard(){
return cards.removeLast();
}
public boolean hasCard(Card card){
int index = 0;
boolean contained = false;
if(cards.size()==0){
System.out.println("error, cards size is 0");
return false;
}
else{
while(index<cards.size() && !contained){
if(cards.get(index).isEqual(card)){
System.out.println("Card found");
contained=true;
}
index++;
}
}
return contained;
}
}
我敢打赌Card类不会覆盖equals()和hashcode()方法。
Object类的默认实现仅检查“ ==”,即两个变量是否指向同一对象实例。 您需要重写equals()和hashcode()来提供适当的相等性检查。 在此处查看有关该主题的精彩讨论-http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf
使用适当的equals()和hashcode(),可以进一步简化您的代码。 例如,hasCard()方法可以简单地调用List方法contains()。
那时它们可能不相等。
检查Card上的equals()方法。
卡类中的equals方法很有可能仅使用“ ==”运算符。 确保进行比较,以使两个具有相同面/西服值的对象被视为相等。
您的Card类是否实现了equals和hashCode方法? 每当需要除身份相等之外的逻辑相等(即,两个引用指向同一对象)时,程序员都应覆盖这两个方法。 java.lang.Object中的默认实现仅执行身份相等检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.