在Java中,您可以覆盖HashMap的键对象的equals和hash方法,以确定如何生成哈希码以及何时应将两个键对象视为相等。
是否有任何Map实现可以通过覆盖其hash方法(并通过可以覆盖的equals(key1,key2)方法确定键的相等性)来定义Map类中的hash和equals?
用例:
假设我们有一个GeoData类的Objects,包含以下字段:国家,地区,城市。我们要访问两个地图:map x 存储每个区域的居民数量,而map y 存储每个城市的居民数量。
为了获得GeoData对象的这两种信息,我们首先需要从该对象中提取国家和地区,然后创建一个新的类X的对象,该对象定义哈希并等同于考虑国家和地区,并将其用作地图 x 的键。另外,我们需要对国家,地区和城市进行同样的操作。创建一个类Y的新对象,并使用它从map y 中获取值。
如果我们为这些地图中的每张地图 x 和 y 扩展Map实现,并覆盖hash(GeoData key)和equals(GeoData key1,GeoData key2)方法,这会避免创建新代码,那会不会更容易每次访问的关键对象?
然后,hash(GeoData键)可以使用地图 x 中的国家和地区,或地图和中的国家,地区和城市进行哈希代码计算。
更新:
正确标记为重复。 This提示建议使用Apache Commons-Collections AbstractHashMap是我想要的。
最佳答案
如果我理解正确,那么您想在不同的GeoData
中使用相同的键类型(Map
)和不同的相等性条件。
如果不是使用HashMap
而是使用TreeMap
并将不同的Comparator<GeoData>
传递给每个TreeMap
构造函数,则可以这样做(一个将通过比较国家,地区和城市来比较两个GeoData
实例,而另一个将仅比较国家和地区)。