是否存在 HashMap 类(或 Map 接口)的实现,它允许我使用备用哈希码和等于操作...类似于如何使用 Collections.sort 中的 Comparator 以多种方式对相同类型的集合进行排序(列表,比较器)。
如果可能的话,我想避免创建一个提供所需哈希码和等于操作的密钥包装器。
就我而言,我需要这样的情况之一:
在我的 Web 应用程序中,对于每个请求,我都会加载位置/ISP 和其他数据。在代码的不同部分(在我的服务和存储库层中),我已经“最小化”了特定于其要求的缓存。
这是一个简化的代码示例:
class GeoIpData{
private String countryName;
private String state;
private String city;
private String isp;
@Override
public int hashCode() {
//countryName hashCode
//state hashCode
//city hashCode
//isp hashCode
}
@Override
public boolean equals(Object obj) {
// compare countryName
// compare state
// compare city
// compare isp
}
}
Map<GeoIpData,#Type1> fullCache = ... //This cache needs to be unique per countryName,state,city and isp
Map<GeoIpData,#Type2> countryCache = ... //This cache needs to be unique per countryName
Map<GeoIpData,#Type2> ispCache = ... //This cache needs to be unique per countryName,isp
为了实现这一点,上述 3 个映射需要 3 个不同的 hashcode 和 equals 方法。
fullCache:
hashCode -> GeoIpData.hashCode();
equals -> GeoIpData.equals(Object obj);
countryCache:
hashCode -> {countryName hashCode }
equals -> {compare countryName }
ispCache:
hashCode -> {countryName hashCode & isp hashCode }
equals -> {compare countryName & compare isp hashCode }