Hashcode / Equals覆盖数字范围而不是直接等于?

时间:2014-07-04 02:46:01

标签: java hashmap equals hashcode

假设我有一个对象,其数字范围为两个属性,即定义数字带的开始和结束。我想将这些对象加载到HashMap中。但是当我查看哈希码并与密钥对象相等时,我希望匹配属于该范围的给定数字。所以我希望hashcode和equals获取一个键中的任何数字,并返回它位于startRange和endRange之间的对象。因此,如果一个对象的startRange为7且endRange为14,则在一个键中传递9将检索该对象。我该怎么做呢? equals将是直截了当的,因为我会使用> =和< =,但我不想破坏哈希码...我知道我可以逐项迭代,但我想避免这样做出于性能原因。

public class MyClass {
private final int marketID;
private final int startRange;
private final int endRange;
...

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + marketID;
    /*I don't want to match on startRange and endRange, I want to fall between it! */
    result = prime * result + endRange; 
    result = prime * result + startRange;
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    MyClass other = (MyClass) obj;
    if (endRange!= other.endRange)
        return false;
    if (marketID != other.marketID)
        return false;
    if (startRange!= other.startRange)
        return false;
    return true;
}
}

0 个答案:

没有答案