Equals and HashCode

  • 24
  • Недоступна
В классе Solution исправить пару методов equals/hashCode в соответствии с правилами реализации этих методов(детали уточни у своего любимого поисковика). Обе строки first и last должны принимать участие в сравнении с помощью метода equals и вычислении hashcode. Метод main не участвует в тестировании.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (188)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
PaiMei in J#
22 уровень, Санкт-Петербург
11 мая, 12:55
Распространенные ошибки при переопределении equals в Java Вместо того, чтобы переопределять метод equals (Override) программист перегружает его (Overload)Синтаксис метода equals() в классе Object определен как public boolean equals(Object obj), но многие программисты ненароком перегружают метод: public boolean equals(Person obj) - вместо Object в качестве аргумента используют имя своего класса (напр. Person). Эту ошибку сложно обнаружить из-за static binding. Таким образом, если вы вызовите этот метод для объекта своего класса, то метод не просто скомпилируется, а даже сделает это корректно. Однако, если вы положите ваш объект в коллекцию, например ArrayList и вызовите метод contains(), работа которого основана на методе equals(), то метод contains не сможет обнаружить ваш объект. Взял информацию из этой статьи
Максим Дудин
23 уровень, Калининград
16 апреля, 16:50
Если сначала решить те две easy что идут после этой, то этот hard превращается в easy, правда тогда там не так всё просто...
vzubkeviсh
24 уровень, Санкт-Петербург
28 марта, 00:00
idea переопределила всё сама) hascode вообще одной строчкой
return Objects.hash(first, last);
и самое интересное компилятор принял, лол? это такое в 11 java появилось?
18 марта, 08:52
Ребята!!! Вот самое классное объяснение!! Затянуто, но реально лучшее, что есть! Всем удачи!
Антон Full Stack Developer
2 марта, 18:48
Обратите внимание, что в hashCode объекты могут быть null
Андрей
25 уровень, Москва
Expert
26 февраля, 21:51
Как делать в жизни не стоит, но в этой задаче тот самый редкий случай, когда можно придумать про "Лишним не будет!"
if (!(o instanceof Solution)) return false;
Без этой строки не проходит
Умалат работаю в totamtosyam
15 апреля, 18:49
Проходит если вот это выражение написать раздельно
if (o == null || this.getClass() != o.getClass()) return false;
вот так
if (o == null) {
            return false;
        }

        if (o.getClass() != this.getClass()){
            return false;
        }
Даниил Александрович
31 уровень, Тамбов
15 февраля, 16:12
обратите внимание! на приходящий параметр equals. это никак не солюшн.
Sergey
23 уровень
11 марта, 17:54
Вооот в чём дело то. Мне даже дебаг не помог. Мораль - всегда ставь @Override при переопределении методов!.
Сэм Фишер
25 уровень, Кишинев
4 февраля, 14:44
сидел руками переписывал hashcode, перемножал на 31 каждое поле и тд - валидатор меня послал. решил в прикол пустить автогенерированный идеей метод return Objects.hash(first,last) и все прошло. залез "под капот" и там почти те же манипуляции(разве что с проверкой), что я делал руками фантастика...
Kes Чайник в Банк
19 января, 02:51
Судя по комментам - бесполезная задача. По ощущениям - так же.
6A6JIOMET
23 уровень
13 января, 17:14
Так как в этой статье не рекомендуют использовать instanceof, а валидатор не пропускает конструкцию
if (getClass() != o.getClass()) return false;
То я использовать конструкцию
if (this.getClass() == n.getClass())
{
   приведение типа объекта;
   сравнение полей;
}
И валидация прошла успешно