在我的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)'操作。 –