[英]Adding elements of different type to arraylist
所以我有一個 arraylist 看起來像這個ArrayList<Card> player1Hand = Player.Player1(seed);
它包含[KH, 9L, 7L, 8L, KE]
每個組合代表一張牌。 和一個包含[KH]
的數組split[]
]
現在我嘗試了這個: if (player1Hand.contains(split[2])) {//code}
現在 if 語句沒有被執行,因為 split[] 包含 String 類型的對象,而 arrayList 包含Card
類型的對象。 有沒有簡單的方法來解決這個問題?
您應該為您的卡 class 創建一個命名構造函數(來自 Effective Java J.Bloch),並像這樣覆蓋equals
和hashCode
:
class Card {
private String valueAsString;
/*your code here*/
public static Card of(String valueAsString) {
Card card = /*create your card here*/
card.valueAsString = valueAsString;
return card;
}
@Override
public boolean equals(Object other) {
/*another part of equals*/
return Objects.equals(valueAsString, other.valueAsString);
}
@Override
public int hashCode() {
return Objects.hash(valueAsString);
}
}
使用該命名構造函數,您可以執行以下操作:
if (player1Hand.contains(Card.of(split[2]))) {
/*do something*/
}
解釋:只要ArrayList
使用equals
方法比較數組中的元素,您就需要正確定義它。 此外,命名構造函數可幫助您根據split[2]
的值創建占位符 object 。 通過這兩個步驟,您將能夠使用contains
,它會按照您的意願工作。 為什么你也應該覆蓋hashCode
? 您應該這樣做,因為有一條非正式規則,您應該始終像一對一樣覆蓋equals
和hashCode
,因為它們必須使用相同的字段集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.