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