假设我有一个对象,其数字范围为两个属性,即定义数字带的开始和结束。我想将这些对象加载到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;
}
}