簡體   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