这是计算Map
哈希码的最佳方法,因为它知道它可能包含类型的条目值,例如:String
,Integer
,Object[]
......?
Map.hashCode()
返回浅层哈希码。这意味着如果您的地图中有String[]
,则Map.hashCode()
也会使用String[]
返回的哈希值。遗憾的是,这不是我想要的(Object.hashCode()
实现)。但是我想要Arrays.hashCode(String[])
实现。
那么处理这个问题的最佳,通用方法是什么?
答案 0 :(得分:6)
如果您需要知道两个地图是否包含相同的值,则需要编写深度比较方法。你不应该依赖hashCode。
即使使用完美的算法,也无法通过单个有符号整数唯一地表示每个可能对象的每个可能集合。
Hashcode仅用于碰撞缩减,当在集合中使用时,它不应该用于唯一标识对象。
答案 1 :(得分:3)
您的问题的解决方案是不使用数组。使用ArrayLists(或其他形式的List,如来自Google的Guava的ImmutableList)。列表以您希望的方式散列。此外,数组与泛型(如地图)的搭配并不是很好。