Выпуск 22. hashCode() и equals() - самое главное.

Поділитися
Вставка
  • Опубліковано 23 гру 2024

КОМЕНТАРІ • 122

  • @ViktorVdovichenko
    @ViktorVdovichenko 5 років тому +53

    Вот это уровень! Вот так знания! Спасибо ОГРОМНОЕ за информацию!

  • @МихаилСкляров-р9щ
    @МихаилСкляров-р9щ 3 роки тому

    Единственный, кто рассказал доступно и самую суть про hashCode. Спасибо.

  • @BernabeuBlaze
    @BernabeuBlaze 3 роки тому +1

    Лучшее видео про hashcode! Автору рахмет.

  • @alexandrmakarevich5334
    @alexandrmakarevich5334 6 років тому +10

    Спасибо,это самое адекватное и понятное объяснение взаимосвязи equals() & hashCode(),которое регулярно спрашивают на собеседовании.Лайк и подписка!

    • @preenxus3425
      @preenxus3425 5 років тому

      откуда ты знаешь? 10 месяцев назад вы наверное и собеседования-то и ни разу не проходили.

    • @korolcreeper
      @korolcreeper 2 роки тому

      @@preenxus3425 В 2022 спрашивают на джуна

    • @cryptobunker9972
      @cryptobunker9972 7 місяців тому

      @@preenxus3425 🤡

  • @АлександрПерелыгин-в4ю

    Очень доходчиво объяснил, спасибо большое)

  • @AnnaSmirnova1
    @AnnaSmirnova1 4 роки тому +8

    Самое крутое объяснение, которое я слышала))) Пересматриваю как готовлюсь к собеседованию

  • @Alex-jx6bz
    @Alex-jx6bz 3 місяці тому

    Благодарю, отличное видео! Теперь все окончательно устаканилось. Автору респект.

  • @onegin5129
    @onegin5129 5 років тому +20

    Хорошо объяснили, многие любят мусолить так что понять что то не реально

  • @synarge2027
    @synarge2027 2 роки тому

    Спасибо тебе огромное!
    Вот теперь у меня появилось полное понимание для чего нужен и как работает hashCode
    Лучший!

  • @СергейИванов-ш6т2ч
    @СергейИванов-ш6т2ч 4 роки тому +6

    Без воды. Спасибо!

  • @kirill5988
    @kirill5988 4 роки тому +1

    Частенько возвращаюсь к этому видео по ходу обучения, очень годно, спасибо!

  • @alekseigrin6126
    @alekseigrin6126 Рік тому

    ну наконец-то человек понимающий свое дело

  • @svetlanamazhaykina6918
    @svetlanamazhaykina6918 6 місяців тому

    Спасибо за Ваш труд! Коммент в поддержку канала.

  • @Mr.GhosTMG
    @Mr.GhosTMG 2 роки тому

    Лучшее объяснение ! Для чего они и с чем их готовят! Спасибо!

  • @ТимурХасмамедов-ч5ш

    Отличное объяснение, спасибо за труд!

  • @EasyTechnoSphere
    @EasyTechnoSphere Рік тому

    Пять лет прошло, а ваша лекция полезна.

    • @java8599
      @java8599  Рік тому

      Она была полезна и 25 лет назад :)

  • @danilasar
    @danilasar 4 роки тому +1

    Простое и грамотное объяснение. Большое спасибо за Ваш труд!

  • @StBrother42
    @StBrother42 4 роки тому +1

    Вам подкасты вести нужно с таким голосом) приятно слушать

  • @LANg.gg8
    @LANg.gg8 2 роки тому +1

    у тебя талант, продолжай снимать видео , ты изменишь людей которые учат Java

  • @ЯрославВладимиров-д7х

    Такой валенок как я даже понял! Спасибо огромное!

  • @KirillMvS
    @KirillMvS Рік тому

    Спасибо за структурированное объяснение!

  • @Ер_улица
    @Ер_улица Місяць тому

    Спасибо за видеоурок!

  • @dariadandria4112
    @dariadandria4112 4 роки тому

    Прекрасное обьяснение, понятно и доходчиво, без лишней воды!

  • @Nidvoraich
    @Nidvoraich Рік тому

    Спасибо! Действительно, очень полезно

  • @gadjik_youtube
    @gadjik_youtube 2 роки тому

    спасибо ! вот теперь стало понятно , зачем вообще это нужно ...

  • @yeson6581
    @yeson6581 3 роки тому

    Спасибо, Антон! Очень классное и понятное объяснение! И расставлены все нужные акценты на действительно важной информации.

  • @ultradaver
    @ultradaver 7 місяців тому

    Самое лучшее объяснение из всех

  • @mikhaillazarev5378
    @mikhaillazarev5378 2 роки тому

    Очень полезная информация, нужно это пересматривать.

  • @---mg7yi
    @---mg7yi 6 років тому +6

    Спасибо за Ваш труд!!!

  • @alexgordeeff
    @alexgordeeff 2 роки тому

    Огромное спасибо что ТААК разжевали, однозначно лайк и подписка!

  • @MiracleMasterpiece
    @MiracleMasterpiece 2 роки тому

    Спасибо огромное за объяснение, как отметили в комментариях, у вас талант понятно рассказать тему!

  • @igorkorotkov9727
    @igorkorotkov9727 5 років тому +1

    Это лучшее объяснение, спасибо огромное, наконец то понял эту связку

    • @java8599
      @java8599  5 років тому

      Спасибо за добрые слова. Удачи.

  • @9762263
    @9762263 6 років тому +6

    супер. в закладки. спасибо!

  • @mpchest1
    @mpchest1 4 роки тому

    Автор, ты просто боженька!

  • @Bah1918
    @Bah1918 4 роки тому +2

    СПАИБО ЗА УРОКИ.

    • @java8599
      @java8599  4 роки тому +1

      Спасибо, что смотрите.

  • @muhammadalirasuljonov799
    @muhammadalirasuljonov799 2 роки тому

    Я видел много видео про equals и hashcode, но это самое понятное

  • @Aladinovich
    @Aladinovich 2 роки тому

    Отлично объяснил, я еще читал что есть некий контракт, который говорит что если ты переопределяешь метод equals то ты должен также переопределить hashCode ну и равносильно если переопределяешь hashCode

  • @vladfedos5554
    @vladfedos5554 3 роки тому +1

    Огромное спасибо, очень полезная информация

  • @ВиталийШумбасов-д1б

    С меня лайк и подписка)
    Очень качественно,без воды)все просто,понятно,и доходчиво!)

  • @MrSBFI
    @MrSBFI 6 років тому +1

    как всегда толково, с расстановкой, по полочкам, спасибо

  • @IuliiaDalskaia
    @IuliiaDalskaia 5 років тому +2

    Спасибо Вам, добрый человек!)

  • @Vadim_Sotnikov
    @Vadim_Sotnikov 5 років тому +2

    Очень хорошее объяснение, спасибо Вам большое!

  • @mikhailmereminskiy7155
    @mikhailmereminskiy7155 5 років тому +1

    Я уже знал об этом. Но Ваше объяснение позволило, что называется, прочувствовать. Спасибо!

  • @ediego_64
    @ediego_64 4 роки тому

    Хорошее объяснение, на простом примере

  • @Дмитрийсекрет-н7о
    @Дмитрийсекрет-н7о 6 років тому +4

    Спасибо. Очень информативно.

  • @agentr227
    @agentr227 2 роки тому

    Отличное видео 👍

  • @leonkonig5131
    @leonkonig5131 4 роки тому

    Спасибо, в кой то веки просто и понятно все объяснено

  • @RomanPochenko
    @RomanPochenko 4 роки тому +1

    Добавил в закладки, отличное видео. Спасибо!

  • @NeXus-zb4zh
    @NeXus-zb4zh 5 років тому +4

    отличное объяснение, спасибо

  • @ЛенарШайхиев-х3о
    @ЛенарШайхиев-х3о 6 місяців тому

    Редко пишу комменты, но здесь снимаю шляпу, спасибо!

  • @ИльяВишняк-м3ь
    @ИльяВишняк-м3ь 2 роки тому

    замечательное видео))

  • @Twinky009
    @Twinky009 4 роки тому

    Спасибо огромное, все очень четко и по делу!!!!!

  • @AnnaSmirnova1
    @AnnaSmirnova1 2 роки тому

    Это самое мое любимое видео на канале)

  • @ВячеславАнатольевич-ь4ф

    Прекрасно!!!

  • @andreypetukhov8054
    @andreypetukhov8054 3 роки тому

    Отличное объяснение!

  • @antonrv6269
    @antonrv6269 4 роки тому

    Хорошее объяснение. Спасибо

  • @margo_lapinskaya_music
    @margo_lapinskaya_music 4 роки тому +1

    спасибо! ОГРОМНОЕ.

  • @АлександрШ-й5ж
    @АлександрШ-й5ж 4 роки тому

    Класс! Очень хорошо объяснено.

  • @МихаилМихаил-ф7у
    @МихаилМихаил-ф7у 5 років тому

    Коротко и по делу!!!

  • @elekrax
    @elekrax 6 років тому +4

    super. 10/10

  • @Eliseev_Serge
    @Eliseev_Serge Рік тому

    Так явно эта мысль мне тоже не встречалась в других источниках.

  • @volodymyr3322
    @volodymyr3322 5 років тому

    Просто бомба. Спасибо за четкое обьяснение

  • @xirrantos
    @xirrantos 3 роки тому

    Отличное объяснение, спасибо!

  • @ИгорьБирт-я2щ
    @ИгорьБирт-я2щ 3 роки тому

    Лучший!

  • @themachine9329
    @themachine9329 2 роки тому

    Хорошо рассказал, но почему не упомянул, что по умолчанию для object сравнение идёт по адресам ссылок объектов? поэтому то нам и надо переопределить equals, но ведь иногда надо сравнивать именно адреса. Переопределение hashcode необходимо когда объект будет участвовать в сравнениях где задействована эта функция, например в коллекциях - так более обще. Надо было упомянуть что Set не допускает дублирования, поэтому не добавился одинаковый элемент. Удивлен как много у тебя про Java, причём каждая тема достаточно подробно объснена - с меня подписка. Спасибо за контент.

  • @РоманНамор-й9ь
    @РоманНамор-й9ь 3 роки тому

    здорово объяснил, спасибо

  • @AntonSidor-n2k
    @AntonSidor-n2k 5 років тому

    Немного запутано но если подумать ...... лайк!

  • @markifive
    @markifive 2 роки тому

    Красивчик !!!

  • @pavelpaddubotski9779
    @pavelpaddubotski9779 5 років тому

    хороший и понятный урок. спасибо

  • @Java-j8r
    @Java-j8r 4 роки тому

    Супер

  • @alexandrkomar4741
    @alexandrkomar4741 3 роки тому

    здравсвуйте. пришел сюда по ссылке... еще зеленый(учусь 3 месяц). не могу понять за счёт чего активизируется метод equals... выходит потому что мы просим вывести количество объектов из arraylist Set и он сразу смотрит автоматически hashcode, а потом уже если нашлись оба одинаковые hashcode активизирует метод equals?

    • @java8599
      @java8599  3 роки тому +1

      Когда мы добавялем что-то в коллекцию, которая работает через хэш-код, сама коллекция спрашивает у добавляемого обхекта hashCode.
      Еще раз - мы добавляем в коллекцию методом add, а сама коллекция вызывает методы hashCode и equals у нашего объекта.
      Удачи :)

    • @alexandrkomar4741
      @alexandrkomar4741 3 роки тому

      @@java8599 спасибо. Понял

  • @Никита-м4в2о
    @Никита-м4в2о 4 роки тому

    Супер полезно!

  • @АмэйзингЧенал
    @АмэйзингЧенал 3 роки тому

    Где ? Что за ситуация где "придется" сравнить два объекта ?👀

    • @java8599
      @java8599  3 роки тому

      Посмотрите еще раз. С 12 минуты это проговаривается достаточно подробно. Но может вам нужны другие слова, другое объяснение - люди разные. Удачи.

  • @emirlanabdullaev8864
    @emirlanabdullaev8864 Рік тому

    как вернуть из переопределённого hashCode -> double к примеру 12.005

    • @java8599
      @java8599  Рік тому

      Никак. Только целое число. И если подумать, то это правильно.

    • @emirlanabdullaev8864
      @emirlanabdullaev8864 Рік тому

      @@java8599 в задачке из степика есть в ТЗ вернуть из переопределенного метода хешкод переменную re из вызываемого объекта,
      Хз как правильно нужно было решать но я вернул return Double.hashCode(re) ;
      Ещё допишу если есть ошибка

    • @java8599
      @java8599  Рік тому

      @@emirlanabdullaev8864 Выглядит вполне досттойно. Если тип re Double, то наверно можно re.hashCode(). Если же тип элементаррный double, то вообще хорошо смотрится.

    • @emirlanabdullaev8864
      @emirlanabdullaev8864 Рік тому

      @@java8599 👍 да второе

  • @ДенисАдмин-г6ц
    @ДенисАдмин-г6ц 6 років тому +1

    Спасибо!

  • @user-ce3lm7sz1k
    @user-ce3lm7sz1k 4 роки тому +1

    bomba!

  • @GuestUser-vf9qe
    @GuestUser-vf9qe 5 років тому

    Спасибо! Описанные здесь проблемы с перебором всех объектов коллекции будут очень хорошо проявляться с использованием Hibernate и прочего ORM-подобного при неправильном написании hashCode()

  • @Никита-э3к
    @Никита-э3к 3 роки тому

    Спасибо

  • @JeyX90
    @JeyX90 4 роки тому

    Спасибо большое! только у вас во всем чебурнэте можно найти, уроки по таким не простым темам!

    • @java8599
      @java8599  4 роки тому

      Спасибо, что заглядываете.

  • @МаксимКизилов-э3я
    @МаксимКизилов-э3я 4 роки тому

    спасибо!

  • @GusLapchatiy
    @GusLapchatiy 4 роки тому

    А что если переданный объект не является MyClass? Сначала нужно проверить на то, что объект является инстанцией нужного класса, а потом проверять на равенство полей. В противном случае, метод может выкидывать ClassCastException, что будет нарушать принцип подстановки Барбары Лисков.

    • @java8599
      @java8599  4 роки тому

      В принципе согласен в Вашими доводами. Просто хотелось сконцентрироваться на главной идее.

    • @GusLapchatiy
      @GusLapchatiy 4 роки тому

      @@java8599 Да, но не в ущерб остальным базовым принципам и понятиям, особенно SOLID

    • @java8599
      @java8599  4 роки тому +1

      @@GusLapchatiy Ну тут каждый решает сам - всегда нужно чуство меры. Иначе из-за леса деревьев не будет видно.

    • @GusLapchatiy
      @GusLapchatiy 4 роки тому

      @@java8599 не согласен - все должно быть по правилам, а то кто-то переопределит hashcode и скажет: "Ну, пожалуй и хватит, пора и меру знать". И оставит реализацию equals() без изменений. Нет такого понятия - мера. Если что-то нужно знать и использовать, то это нужно знать и потом использовать, без оглядки на то кому чего будет где видно.

    • @java8599
      @java8599  4 роки тому +1

      @@GusLapchatiy Ну это Ваша точка зрения. У меня другая. И что ?

  • @jowigi4885
    @jowigi4885 4 роки тому

    Хорошо что не Нурлан)

  • @vitalieandrusca4742
    @vitalieandrusca4742 6 років тому +1

    oigitelino!

  • @vitalieandrusca4742
    @vitalieandrusca4742 6 років тому

    Mujik !!!

  • @HowItWorks
    @HowItWorks 5 років тому

    Вот этот ваш лонг в конструкторе как песком по глазам. Зачем принимать лонг, потом преобразовывать его к инту в хэшкоде? Почему не сказано, что это относится к работе коллекций в основе которых лежит хэш таблица? Почему "проверки" не сделаны в тестовых классах, а в мэин навалом? Ну и куча какой то воды, не раскрывающей суть работы хэш таблицы. Не рассказано про бакеты, индексы, коллизии и связанные списки, про лоад фактор. Важность хэшкода проявляется когда понимаешь как работает хэш таблица. А из этого виде как то не очень понятно. 19:55 Хэшкод не сужает ничего. По хэшкоду расчитывается индекс бакета в который попадает обьект, а в нем уже идет поиск по иквелсу если там уже есть обьекты. И эти обьекты там хранятся в виде связанного списка, что в свою очередь затратно для поиска. Вот и все.

    • @java8599
      @java8599  5 років тому

      Вы рассказываете про реализацию HashMap, но не путайте контракт между equals и hashCode как идею и ее конкретное воплощение в HashMap. Кто Вам сказал, что только HashMap имеет исключительные права на использование этого контракта ?

    • @java8599
      @java8599  5 років тому

      А по поводу Long в конструкторе - в базе данных у Вас так мало записей, что Вы можете себе позволить делать идентификатор в виде Integer ?

    • @HowItWorks
      @HowItWorks 5 років тому

      @@java8599 причем тут HashMap? Это всего лишь одна из реализаций коллекции использующая хэш таблицу. А писал я именно про хэш таблицы. Читайте внимательней что я пишу и не перекручивайте.

    • @HowItWorks
      @HowItWorks 5 років тому +1

      @@java8599 по поводу БД. Не мешайте всё в кучу. У вас тут идет разговор про переопределение public int hashCode() для джавовских обджектов. А он возвращает инт как не крути и независимо от того, сколько у вас обьектов в БД и вообще сколько обьектов вы способны нагенерировать. И это напрямую относится к контракту меду хэшкодом и иквелсом. А именно это отднонаправленный контракт. Если a.equals(b)==true, то a.hashCode()==b.hashCode(), но не наоборот. Если a.hashCode()==b.hashCode(), то не обязательно a.equals(b)==true. В этом ключ к пониманию этого контракта.
      :) переписывал пару раз, что бы было боле наглядно.. чуть сам не запутался.

    • @java8599
      @java8599  5 років тому +1

      Вы другими словами сказали то же, что и я. Просто я концентрировался на контракте, как идее - НЕравенство хэшкодов однозначно говорит о том, что объекты НЕ равны. Как это использовать - личное дело каждого.

  • @ukratitelkisok9726
    @ukratitelkisok9726 9 місяців тому

    Лучший!

  • @nikolaypirozhkov9786
    @nikolaypirozhkov9786 4 роки тому

    Спасибо!

  • @katelvova5791
    @katelvova5791 4 роки тому +1

    Спасибо!!!

  • @ЕвгенийВовк-ы7ь
    @ЕвгенийВовк-ы7ь 3 роки тому

    Спасибо!