Хэш-код карты Java - PullRequest
       23

Хэш-код карты Java

2 голосов
/ 10 декабря 2010

Какой лучший способ вычислить хеш-код Map, зная, что он может содержать значения записей таких типов, как: String, Integer, Object[] ...?

Map.hashCode() возвращает поверхностный хэш-код.Это означает, что если у вас есть String[] на вашей карте, Map.hashCode() также будет использовать хэш, возвращенный String[].К сожалению, это не то, что я хочу (реализация Object.hashCode()).Но я хочу реализацию Arrays.hashCode(String[]).

Так какой же самый лучший общий подход для решения этой проблемы?

Ответы [ 2 ]

6 голосов
/ 10 декабря 2010

Если вам нужно знать, содержат ли две карты одинаковые значения, вам нужно написать метод глубокого сравнения.Вы не должны зависеть от hashCode.

даже с идеальным алгоритмом, нет никакой возможности, чтобы каждая возможная коллекция каждого возможного объекта могла быть уникально представлена ​​одним целым числом со знаком.

Хэш-кодпросто для коллизии уменьшение при использовании в коллекциях не предполагается, что он будет использоваться для уникальной идентификации объектов.

3 голосов
/ 10 декабря 2010

Решение вашей проблемы - не использовать массивы.Используйте ArrayLists (или некоторую другую форму List, например, ImmutableList из Google Guava).Списки хэш, как вы хотите.Кроме того, массивы не очень хорошо работают с генериками (такими как Карты).

...