【发布时间】:2017-01-04 10:25:36
【问题描述】:
在 Java 中,您可以覆盖 HashMap 的键对象的 equals 和 hash 方法,以确定如何生成哈希码以及何时应将两个键对象视为相等。
是否有任何 Map 实现允许在 Map 类中通过覆盖其哈希方法(并通过可覆盖的 equals(key1,key2) 方法确定键相等性)来定义哈希和等于?
用例:
Ĺets 假设我们有一个 GeoData 类的对象,其中包含以下字段:国家、地区、城市。我们要访问两个地图:地图x存储每个区域的居民数量,地图y存储每个区域的居民数量每个城市的居民。
要获取 GeoData 对象的两个信息,我们首先需要从该对象中提取国家和地区,然后创建一个 X 类的新对象,该对象定义哈希和等于考虑国家和地区,并将其用作地图的键 x。此外,我们需要对国家、地区和城市做同样的事情。创建一个 Y 类的新对象并使用它从地图 y 中获取值。
如果我们为这些地图 x 和 y 中的每一个都扩展一个 Map 实现会不会更容易> 并覆盖 hash(GeoData key) 和 equals(GeoData key1,GeoData key2) 方法,这样也可以避免为每次访问创建新的 key 对象?
hash(GeoData key) 可以在地图 x 中使用国家和地区,或者在地图 y 中使用国家、地区和城市em> 用于哈希码计算。
更新:
已正确标记为重复。 This 回答建议 apache commons-collections AbstractHashMap 是我正在寻找的。p>
【问题讨论】: