Как я могу получить хэш / MD5 от объекта? - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть такой класс

Class A{

  private String string1;
  private String string2;
  ..
  ..

  private String string19;

}

Некоторые строки могут быть пустыми.

Я хочу получить хеш / идентификатор (строку или число) для экземпляров этого класса. Я могу использовать hashCode, но я не знаю, смогу ли я получить какое-либо столкновение, у меня много экземпляров этого класса (около 4-5 миллионов).

Мне нужен быстрый способ получить этот хэш.

Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Вы можете написать собственный метод hashCode, который использует слегка измененную версию алгоритма hashCode в классе String.Из документации Oracle, String hashCode вычисляется следующим образом:

 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

Вы можете реализовать модифицированную версию, в которой вы вычисляете n для всех объектов String в вашем классе.Таким образом, вы не тратите пространство и время на создание объединенной строки для того же.В некоторых случаях это может быть хорошо, но с 4-5 миллионами объектов вы, вероятно, захотите избежать такого большого оттока.

Источник: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#hashCode%28%29

0 голосов
/ 05 декабря 2011

Вы можете объединить все строки, а затем сделать хэш по вашему выбору. Если строка имеет значение null, вы можете использовать «Null» или любую другую строку - это действительно не имеет значения, если вы последовательны.

...