[英]Hashmap 1 key 2 values - using containsvalue
我在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)
您應該使用諸如P_and_h.containsValue(pair)
這樣的Pair
對象進行檢查。
containsValue()如果此映射將一個或多個鍵映射到指定值,則返回true。
由於該值的類型為Pair
您應該搜索Pair
並將其作為參數傳遞給containsValue()
方法; 如果要查找“有意義地”相等的對象,即包含相同字段的對象(在您的情況下為相同的HorseModifier
和LivingEntity
equals()
則還應該重寫hasCode()
和equals()
。 否則,它僅檢查您傳遞的引用是否引用Map
中存在的Object(無論其字段如何)。
您應該使用Map#containsKey()
if (P_and_h.containsKey(p)) {
// ...
}
或者,通過同一Pair
if (P_and_h.containsValue(new Pair(hm, hm.getHorse()))) {
// ...
}
不建議使用containsValue()
。 因為,它不能利用散列(這是針對鍵而不是鍵的值進行的),所以會給您帶來糟糕的性能。 有關更多信息,請參見Map#containsValue()
對於Map接口的大多數實現,此操作可能需要地圖大小中的時間線性。
太糟糕了,這是不可能的!
通過提示,我會說Pair
需要實現equals()
但是containsKey
不能通過使用equals()
進行檢查,而是使用==
來檢查身份。
太糟糕了,您不能使用HashMap。
containsKey
和containsValue
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.