Хотел спросить:
И так же, как для equals(), для метода hashCode() есть официальные требования, прописанные в документации Oracle:
Если два объекта равны (т.е. метод equals() возвращает true), у них должен быть одинаковый хэш-код.
Иначе наши методы будут лишены смысла. Проверка по hashCode(), как мы и сказали, должна идти первой для повышения быстродействия. Если хэш-коды будут разными, проверка вернет false, хотя объекты на самом деле равны (согласно нашему определению в методе equals()).
Если метод hashCode() вызывается несколько раз на одном и том же объекте, каждый раз он должен возвращать одно и то же число.
Правило 1 не работает в обратную сторону. Одинаковый хэш-код может быть у двух разных объектов.
Я запутался помогите разобраться:
Почему в 3 правило написано мол правило 1 не работает в обратную сторону?
Получается 1 правило 2 объекта равны и у них хэш-код одинаковый.
А 3 правило так же одинаковый хэш-код у 2 объектов или я не очень понимаю? Почему в 1 правило написано если 2 объекта равны, а в 3 правило написано одинаковый хэш-код может быть у двух РАЗНЫХ объектов, как понять разных?
Примечание: предполагается, что в классе переопределен метод hashCode()
.
По хорошему, у разных объектов хешкод должен быть разный. Но на практике иногда происходит по другому. Очень часто это происходит из-за несовершенства формулы для вычисления хешкода.
Пример: хеш строки считается по длине строки: length*3
. Тогда у строк foo
и bar
одинаковые хеши.
Вообще, хешкод используется для того, чтобы можно было точно сказать, что объекты разные. Но не для того, чтобы сказать, что они одинаковые. Одинаковый хешкод - не гарантия одинаковых объектов.
Обычно он используется для сравнения объектов:
Допустим, у вас есть объект, в котором есть много-много полей. В большинстве случаев объекты для сравнения будут неравны. Чтобы не сравнивать кучу переменных(если объекты не равны), можно сначала сравнивать хешкод(т.к., если хеш различается, то объекты точно различны). Если хеши отличаются - можно дальше не сравнивать переменные. Если одинаковы - дальше нужно сравнить переменные(т.к., если хеши одинаковы, то это не значит, что объекты одинаковы).
Ну и последнее - почти всегда возвращаемый тип метода hashCode()
- int
. У int
есть определенный предел(от -21... до +21..., если я не ошибаюсь). Если разных объектов будет больше, чем этот предел, то физически нельзя сгенерировать разные хеши для всех объектов. Т.е., при использовании хешей можно увеличить производительность программы.
Попробую объяснить правила:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветРешил сделать простенькое приложение для "изучения" английского
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
хотел узнать как реализовать передачу js функции из консоли одной вкладки, в консоль другой вкладки, как-нибудь это реализуемо? Решил сделать...
У меня есть курс валют к ним нужно применить tofixed что бы было так 6542 руб а не такой результат 65