繁体   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