如果一个Map
包含了String
、Integer
、Object[]
等类型的值,那么计算它的哈希码应该采用哪种方式最佳?
Map.hashCode()
返回的是浅层哈希码。这意味着如果你在map中有一个String[]
,Map.hashCode()
也会使用String[]
返回的哈希码。但不幸的是,我想要的是Object.hashCode()
的实现。而我想要的是Arrays.hashCode(String[])
的实现。
那么,处理这个问题的最佳通用方法是什么?
如果一个Map
包含了String
、Integer
、Object[]
等类型的值,那么计算它的哈希码应该采用哪种方式最佳?
Map.hashCode()
返回的是浅层哈希码。这意味着如果你在map中有一个String[]
,Map.hashCode()
也会使用String[]
返回的哈希码。但不幸的是,我想要的是Object.hashCode()
的实现。而我想要的是Arrays.hashCode(String[])
的实现。
那么,处理这个问题的最佳通用方法是什么?
你的问题的解决方案是不要使用数组,而是使用ArrayLists(或其他形式的List,比如Google的Guava中的ImmutableList)。Lists可以按照你想要的方式进行哈希。此外,数组与泛型(如Maps)并不兼容。
equals
方法。 - Kirk Woll