在stackoverflow中的某个地方,我找到了大约2个值的解决方案。
public class Pair<A, B> {
A first = null;
B second = null;
Pair(A first, B second) {
this.first = first;
this.second = second;
}
public A getFirst() {
return first;
}
public void setFirst(A first) {
this.first = first;
}
public B getSecond() {
return second;
}
public void setSecond(B second) {
this.second = second;
}
}
public static HashMap<Player, Pair<HorseModifier, LivingEntity>> P_and_h =
new HashMap<Player,Pair<HorseModifier, LivingEntity>>();;
问题是:
P_and_h.put(p, new Pair(hm, hm.getHorse()));
if(P_and_h.containsValue(HorseModifier))` - dont working ( this is first object)
答案 0 :(得分:1)
您应该使用此Pair
这样的P_and_h.containsValue(pair)
对象进行检查。
containsValue()如果此映射将一个或多个键映射到指定值,则返回true。
答案 1 :(得分:0)
由于该值属于Pair
类型,因此您应该搜索Pair
并将其作为参数传递给方法containsValue()
;
如果要查找“有意义”相等的对象,即包含相同字段的对象,在您的情况下,hasCode()
和{{1},您还应该覆盖equals()
和HorseModifier
}}。否则,它仅检查您传递的引用是否指向LivingEntity
中存在的对象,而不管其字段如何。
答案 2 :(得分:0)
您应该使用Map#containsKey()
if (P_and_h.containsKey(p)) {
// ...
}
或传递相同的Pair
if (P_and_h.containsValue(new Pair(hm, hm.getHorse()))) {
// ...
}
建议使用containsValue()
不。因为,它不能利用散列(对键而不是它们的值),它会给你带来糟糕的性能。有关详情,请访问Map#containsValue()
对于Map接口的大多数实现,此操作可能需要地图大小的线性时间。
答案 3 :(得分:0)
太糟糕了,这不可能!
通过instict我会说Pair
需要实现equals()
但containsKey
不要使用equals()
进行检查,它会使用==
检查身份。
太糟糕了,你不能使用HashMap。
containsKey
和containsValue
。