繁体   English   中英

从链接列表JAVA中删除元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM