[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-core-esli-u-klassa-point-int-x-y-realizovat-metod-equals-object-that-return-this-x-that-x-this-y-that-y-no-sdelat-khesh-kod-v-vide-int-hashcode-return-x-to-budut-li-korrektno-takie-tochki-pomeshchatsya-i-i":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},93,"esli-u-klassa-point-int-x-y-realizovat-metod-equals-object-that-return-this-x-that-x-this-y-that-y-no-sdelat-khesh-kod-v-vide-int-hashcode-return-x-to-budut-li-korrektno-takie-tochki-pomeshchatsya-i-i",2,"java-core","Java Core","☕","Если у класса `Point{int x, y;}` реализовать метод `equals(Object that) {(return this.x == that.x && this.y == that.y)}`, но сделать хэш код в виде `int hashCode() {return x;}`, то будут ли корректно такие точки помещаться и извлекаться из `HashSet`?","`HashSet` использует `HashMap` для хранения элементов. При добавлении элемента в `HashMap` вычисляется хэш код, по которому определяется позиция в массиве, куда будет вставлен новый элемент. У всех экземпляров класса `Point` хэш код будет одинаковым для всех объектов с одинаковым `x`, что приведёт к вырождению хэш таблицы в список.\n\nПри возникновении коллизии в `HashMap` осуществляется проверка на наличие элемента в списке: `e.hash == hash && ((k = e.key) == key || key.equals(k))`. Если элемент найден, то его значение перезаписывается. В нашем случае для разных объектов метод `equals()` будет возвращать `false`. Соответственно новый элемент будет успешно добавлен в `HashSet`. Извлечение элемента также будет осуществляться успешно. Но производительность такого кода будет невысокой, из-за неэффективности хэш-функции, которая cпособна породить большое количество колизий.","","middle",[15,16,17,18,19],"core","HashMap","hashCode","equals","HashSet",[],null,{"title":23,"description":24,"ogTitle":25,"ogDescription":26,"keywords":27,"schemaAnswer":32,"featuredSnippetReady":33},"Point с hashCode() {return x;} и HashSet — корректно ли работает? — Gymterview","Разбор работы HashSet с классом Point, у которого hashCode() возвращает только x. Точки будут помещаться и извлекаться корректно, но с низкой производительностью.","Point с hashCode() {return x;} и HashSet — Gymterview","Точки будут помещаться и извлекаться корректно, но производительность будет низкой из-за большого количества коллизий.",[17,18,19,16,28,29,30,31],"коллизия","Point","Java","собеседование","HashSet использует HashMap для хранения элементов. У всех экземпляров класса Point хэш-код будет одинаковым для объектов с одинаковым x, что приведёт к вырождению хэш-таблицы в список. При коллизии HashMap проверяет элементы через equals(). Элементы будут успешно добавляться и извлекаться, но производительность будет невысокой из-за неэффективной хэш-функции, порождающей большое количество коллизий.",true]