Главная
Java
hashCode.
в терминах Java, хеш-код – это эметод который принимает на вход Обьект и возвращает int. (это слепок сожержимого полей Обьекта)
Следует понимать, что множество возможных хеш-кодов ограничено примитивным типом int, (т.е. уникальных значений всего 4.294.967.296)
а множество объектов ограничено только нашей фантазией (т.е. обьектов может быть больше кол-ва уникальных хеш-кодов ).
Отсюда следует утверждение: “Множество объектов мощнее множества хеш-кодов”.
Из-за этого ограничения, вполне возможна ситуация, что хеш-коды разных объектов могут совпасть.
Соглашение между equals и hashCode в Java :
1) Если объекты равны по результатам выполнения метода equals, тогда их hashcode должны быть одинаковыми2) Если объекты не равны по результатам выполнения метода equals, тогда их hashcode могут быть как одинаковыми, так и разными.
Однако для повышения производительности, лучше, чтобы разные объекты возвращали разные коды.
методы Object:
- int *.hashCode() : Метод hashCode позволяет задать некоторое числовое значение, которое будет соответствовать данному объекту или его хэш-код.Если два объекта равны по методу equals (Object), то вызов метода hashCode для каждого из двух объектов должен привести к одному целочисленному результату.
1) для одного и того-же объекта, хеш-код всегда будет одинаковым;
2) если объекты одинаковые, то и хеш-коды одинаковые (но не наоборот, см. правило 3).
3) если хеш-коды равны, то входные объекты не всегда равны (коллизия);
4) если хеш-коды разные, то и объекты гарантированно разные;
Полезные ссылки:
- baeldung.com Java equals() and hashCode() Contracts
- Object in JavaDoc
- Разбираемся с hashCode() и equals() (хабр)