Лучший способ определить метод хеш-кода для массива char - PullRequest
0 голосов
/ 04 октября 2018

Лучший способ определить метод хеш-кода для массива char.Есть ли лучший способ реализовать наш собственный метод hascode () для минимальной коллизии?

char arr1[]={'a','b','c'};
char arr2[]={'b','a','c'};
char arr3[]={'c','a','b'};

int hashcode() {
   int p=31;
   int n=arr1.length;
   int hash=1;
   for(int i=0;i<n;i++) {
       hash=31*hash+(int)arr1[i];
   }
   return hash;
}

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Это очень сильно зависит от того, как ваши данные обычно отличаются друг от друга.

Вы можете написать эту функцию хеш-кода:

return arr.Length;

И она может идеально соответствовать, если большинство вашихМассивы имеют разный размер.

Или вы можете использовать первые два элемента, если ваш массив обычно имеет совершенно другое содержимое.

Примечание: нет смысла зацикливать весь массив и делатьнечто более сложное, чем сравнение со значением другого массива.Зачем?Потому что хеш-код используется только для оптимизации производительности.Так что это должно быть намного быстрее, чем EqualsEquals сравнивает все значения.

Если массивы различаются по размеру, Equals не будет зацикливаться.Вместо этого он возвращается сразу после сравнения Length.Попробуйте превзойти это в функции хэш-кода.

0 голосов
/ 04 октября 2018

Если у вас есть объект, который содержит массив символов, и вы хотите переопределить hashCode (), тогда вы можете использовать метод для него:

java.util.Arrays.hashCode()
...