gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:47:28 26 4
gpt4 key购买 nike

是否有 HashMap 类(或 Map 接口(interface))的实现允许我使用备用哈希码和等于操作...类似于如何使用 Collections.sort(list, comparator) 中的 Comparator 以多种方式对相同类型的集合进行排序。

我想尽可能避免创建提供所需哈希码和等于操作的 key 包装器。


就我而言,我需要这样的场景之一:

在我的网络应用程序中,对于每个请求,我都会加载位置/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 Trove允许您为特定的 TObjectHashingStrategy 提供您自己的散列和 TCustomHashMap 的等值函数。

关于java - HashMap 的自定义哈希码/等于操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com