在我的java程序中,我有一個映射,其中包含someID和MyClass類型的數據對象之間的關聯。如何實現不對稱等於功能?
ConcurrentMap<Integer, MyClass> a;
我不太經常但經常檢查一個「值」對象是否包含某個長變量b。由於我不知道將someId與其他Id相關聯,因此無法通過地圖訪問它。 要做到這一點,我想使用的containsValue:
a.containsValue(otherId)
爲了實現這個目標我重寫了哈希碼和平等的功能。
@Override
public boolean equals(Object o) {
if ((o instanceof MyClass) && (((MyClass) o).someId().equals(this.someId()))) {
return true;
} else
if ((o instanceof Long) && ((Long) o) == this.otherId) {
return true;
} else {
return false;
}
}
注意:代碼中的otherId不一定需要是地圖的someID。
第一個if語句是對稱的,第二個顯然不是。我明白,這不是很好,但每次寫一個循環也不好。 在this post他們說不對稱等於將被忽略。我如何讓java忽略不對稱問題?
等於已被定義,在這種情況下,你不能是對稱其「忽略」的問題因爲你不能修改「長」類。如果你的鑰匙可以成爲「長」,那麼只需要長一點。 –
儘可能地避免在Map上調用'containsValue',因爲它是一個'O(n)'操作。 –