HashMap 的自定义哈希码/等于操作

2024-06-22

是否有 HashMap 类(或 Map 接口)的实现允许我使用替代的 hashcode 和 equals 操作... 类似于如何使用 Collections.sort(list, 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 }

GNU 宝库 http://trove4j.sourceforge.net/html/overview.html允许您为 TCustomHashMap 提供具有您自己的哈希和等于函数的特定 TObjectHashingStrategy。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HashMap 的自定义哈希码/等于操作 的相关文章

随机推荐