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