簡體   English   中英

將不同類型的元素添加到 arraylist

[英]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),並像這樣覆蓋equalshashCode

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 您應該這樣做,因為有一條非正式規則,您應該始終像一對一樣覆蓋equalshashCode ,因為它們必須使用相同的字段集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM