Добавление чисел в hashCode () для чего? - PullRequest
2 голосов
/ 08 ноября 2019

Я начинающий У меня есть исходный код, я нашел этот метод

    @Override
    public int hashCode(){

        return this.name.hashCode() + 57;

    }

Он работает для удаления дубликатов из объекта HashSet, мой вопрос: почему существует 57, я удалил его, тогда код работал хорошо,так что такое использование чисел в этом методе?

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

в коде:

class MyClass {
   public int hashCode(){
      return this.name.hashCode() + 57;
   }
}

Вопрос действителен, потому что this.name.hashCode() является правильно сформированной hashCode() реализацией (можно предположить, что this.name является String).

Я думаю, что число добавляется, потому что метод hashCode() взят из Object. Представьте, что у вас есть Set со значениями типа String и MyClass. Если экземпляр String совпадает с экземпляром MyClass.name, то при добавлении 57 следует избегать использования обоими одинаковыми хэш-кодами.

0 голосов
/ 08 ноября 2019

При условии, что this.name имеет хорошо реализованный метод hashCode, добавление этого 57 там не нужно. Фактически, независимо от того, как hashCode реализован в this.name, добавление 57 здесь не поможет. Таким образом, вы сделали добро, удалив его.

...