Size: a a a

2021 January 26

G

GladkiyKriminal in learn.java
Qwant
Когда мы пишем this == obj. То по факту что делает знак ==?
Берет hashcode у 2 объектов и сравнивает их?
Сравнивает ссылки
источник

в

вαғғσмεттι in learn.java
интересно, у меня нет. сейчас проверю инпут, может он кривой
источник

Q

Qwant in learn.java
GladkiyKriminal
Сравнивает ссылки
А почему нельзя было просот вызвать hashcode) он изначально тоже ведь по дефолту ссылку выдает_
источник

G

GladkiyKriminal in learn.java
Qwant
А почему нельзя было просот вызвать hashcode) он изначально тоже ведь по дефолту ссылку выдает_
Хеш-код и ссылка разные вещи, тебе же писали про коллизии
источник

в

вαғғσмεттι in learn.java
благодарю, все заработало. входные данные были кривыми
источник

Э

Эд in learn.java
Qwant
Здравствуйте) подскажите пжлст, зачем нужен equals, когда есть hashcode?
Ведь если hashcode равны, то разве этого не достаточно, чтобы добавить объект в мапу?
hashcode может быть одинаков для объектов a и b, для которых a.equals(b) == false
источник

Э

Эд in learn.java
для объектов, чей тип ниже Object, и они переопределили hashcode() так, что для разных объектов может быть один hashcode
источник

APTEM Ковалёв in learn.java
Эд
hashcode может быть одинаков для объектов a и b, для которых a.equals(b) == false
Хашкод может быть одинаков для не равных объектов
источник

Э

Эд in learn.java
APTEM Ковалёв
Хашкод может быть одинаков для не равных объектов
Я это и написал
источник

APTEM Ковалёв in learn.java
Эд
Я это и написал
Не тому ответил)
источник

DC

Denis Chikanov in learn.java
Qwant
А почему нельзя было просот вызвать hashcode) он изначально тоже ведь по дефолту ссылку выдает_
Избавься от мысли "можно строго сравнивать объекты по хэшу", пожалуйста. Она не соответствует действительности. Если ты прочитал о хэш-коллизиях, ты должен это понять.
источник

DK

Denis Kapaev in learn.java
Qwant
Здравствуйте) подскажите пжлст, зачем нужен equals, когда есть hashcode?
Ведь если hashcode равны, то разве этого не достаточно, чтобы добавить объект в мапу?
hashcode быстрый, equals как правило более медленный

поэтому есть смысл сначала отсеять заведомо неравные элементы с разным хэшкодом, а те у которых хэшкод одинаковый, уже сравнить полноценно через equals
источник

Э

Эд in learn.java
Может, лучше уточнить, что не hashcode быстрее equals, а поиск бакета в хешмапе выполняется за O(1),  а конкретного элемента - зависит от структуры в бакете и распределения по мапе?
источник

DK

Denis Kapaev in learn.java
Эд
Может, лучше уточнить, что не hashcode быстрее equals, а поиск бакета в хешмапе выполняется за O(1),  а конкретного элемента - зависит от структуры в бакете и распределения по мапе?
я про общий случай сравнения объектов

> не hashcode быстрее equals
а разве не быстрее? там элементарная арифметика и её довольно мало, а в equals может быть всё что угодно
источник

Э

Эд in learn.java
Denis Kapaev
я про общий случай сравнения объектов

> не hashcode быстрее equals
а разве не быстрее? там элементарная арифметика и её довольно мало, а в equals может быть всё что угодно
Можно же всё, что угодно в hashcode написать) хоть try { Thread.sleep(3) }
И потом если даже hashcode быстрее, то это вообще незначительно
источник

Q

Qwant in learn.java
Как такое вообще может быть?
Читаю и ни как не пойму....
если хеш-коды равны, то входные объекты не всегда равны (коллизия);
источник

DK

Denis Kapaev in learn.java
Эд
Можно же всё, что угодно в hashcode написать) хоть try { Thread.sleep(3) }
И потом если даже hashcode быстрее, то это вообще незначительно
в нормальной имплементации хэшкода никаких try { Thread.sleep(3) } быть не может

equals для больших объектов со сложной внутренней структурой будет заведомо медленнее хэшкода, по поводу "незначительно" это у кого как
источник

Q

Qwant in learn.java
метод hashcode ведь переопредел и сумма полей должна дать другое значение, а тут магия какая - то происходит....
источник

Q

Qwant in learn.java
Qwant
Как такое вообще может быть?
Читаю и ни как не пойму....
если хеш-коды равны, то входные объекты не всегда равны (коллизия);
Такое возможно, если специально в hashcode самоу прописать число вручную...но кто так делает вообще.

Мой мозг кипит просто =(
источник

Э

Эд in learn.java
Qwant
метод hashcode ведь переопредел и сумма полей должна дать другое значение, а тут магия какая - то происходит....
какая сумма полей?
источник