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

  Рет қаралды 28,411

Изучаем Java

Изучаем Java

6 жыл бұрын

Рассматривается основная идея методов hashCode() и equals(), которая (по мнению автора) должна объяснить самую суть их связи и применения.

Пікірлер: 121
@svetlanamazhaykina6918
@svetlanamazhaykina6918 6 күн бұрын
Спасибо за Ваш труд! Коммент в поддержку канала.
@ViktorVdovichenko
@ViktorVdovichenko 5 жыл бұрын
Вот это уровень! Вот так знания! Спасибо ОГРОМНОЕ за информацию!
@ultradaver
@ultradaver Ай бұрын
Самое лучшее объяснение из всех
@user-zi6dm2lk5n
@user-zi6dm2lk5n 5 жыл бұрын
Очень доходчиво объяснил, спасибо большое)
@AnnaSmirnova1
@AnnaSmirnova1 4 жыл бұрын
Самое крутое объяснение, которое я слышала))) Пересматриваю как готовлюсь к собеседованию
@onegin5129
@onegin5129 4 жыл бұрын
Хорошо объяснили, многие любят мусолить так что понять что то не реально
@user-tg2ep1hx1r
@user-tg2ep1hx1r 2 жыл бұрын
Единственный, кто рассказал доступно и самую суть про hashCode. Спасибо.
@gadjik_youtube
@gadjik_youtube Жыл бұрын
спасибо ! вот теперь стало понятно , зачем вообще это нужно ...
@alexandrmakarevich5334
@alexandrmakarevich5334 6 жыл бұрын
Спасибо,это самое адекватное и понятное объяснение взаимосвязи equals() & hashCode(),которое регулярно спрашивают на собеседовании.Лайк и подписка!
@preenxus3425
@preenxus3425 5 жыл бұрын
откуда ты знаешь? 10 месяцев назад вы наверное и собеседования-то и ни разу не проходили.
@korolcreeper
@korolcreeper Жыл бұрын
@@preenxus3425 В 2022 спрашивают на джуна
@cryptobunker9972
@cryptobunker9972 Ай бұрын
@@preenxus3425 🤡
@BernabeuBlaze
@BernabeuBlaze 2 жыл бұрын
Лучшее видео про hashcode! Автору рахмет.
@user-dr4ji1oo2z
@user-dr4ji1oo2z 4 жыл бұрын
Без воды. Спасибо!
@Nidvoraich
@Nidvoraich Жыл бұрын
Спасибо! Действительно, очень полезно
@muhammadalirasuljonov799
@muhammadalirasuljonov799 2 жыл бұрын
Я видел много видео про equals и hashcode, но это самое понятное
@danilasar
@danilasar 4 жыл бұрын
Простое и грамотное объяснение. Большое спасибо за Ваш труд!
@---mg7yi
@---mg7yi 6 жыл бұрын
Спасибо за Ваш труд!!!
@user-jt4ol9fb2q
@user-jt4ol9fb2q Ай бұрын
Редко пишу комменты, но здесь снимаю шляпу, спасибо!
@kirill5988
@kirill5988 4 жыл бұрын
Частенько возвращаюсь к этому видео по ходу обучения, очень годно, спасибо!
@synarge2027
@synarge2027 Жыл бұрын
Спасибо тебе огромное! Вот теперь у меня появилось полное понимание для чего нужен и как работает hashCode Лучший!
@IuliiaDalskaia
@IuliiaDalskaia 4 жыл бұрын
Спасибо Вам, добрый человек!)
@Vadim_Sotnikov
@Vadim_Sotnikov 4 жыл бұрын
Очень хорошее объяснение, спасибо Вам большое!
@user-yo7mw6oj4p
@user-yo7mw6oj4p 6 жыл бұрын
Спасибо. Очень информативно.
@yeson6581
@yeson6581 2 жыл бұрын
Спасибо, Антон! Очень классное и понятное объяснение! И расставлены все нужные акценты на действительно важной информации.
@dariadandria4112
@dariadandria4112 3 жыл бұрын
Прекрасное обьяснение, понятно и доходчиво, без лишней воды!
@MrSBFI
@MrSBFI 6 жыл бұрын
как всегда толково, с расстановкой, по полочкам, спасибо
@Mr.GhosTMG
@Mr.GhosTMG 2 жыл бұрын
Лучшее объяснение ! Для чего они и с чем их готовят! Спасибо!
@mpchest1
@mpchest1 3 жыл бұрын
Автор, ты просто боженька!
@user-bs3mo9wz3h
@user-bs3mo9wz3h 2 жыл бұрын
С меня лайк и подписка) Очень качественно,без воды)все просто,понятно,и доходчиво!)
@vladfedos5554
@vladfedos5554 3 жыл бұрын
Огромное спасибо, очень полезная информация
@user-mh4jq8rr7i
@user-mh4jq8rr7i 4 жыл бұрын
Такой валенок как я даже понял! Спасибо огромное!
@NeXus-zb4zh
@NeXus-zb4zh 5 жыл бұрын
отличное объяснение, спасибо
@volodymyr3322
@volodymyr3322 5 жыл бұрын
Просто бомба. Спасибо за четкое обьяснение
@hr0fft
@hr0fft 3 жыл бұрын
Отличное объяснение, спасибо!
@agentr227
@agentr227 2 жыл бұрын
Отличное видео 👍
@user-gb3zo3kr3x
@user-gb3zo3kr3x 7 ай бұрын
Отличное объяснение, спасибо за труд!
@Twinky009
@Twinky009 3 жыл бұрын
Спасибо огромное, все очень четко и по делу!!!!!
@9762263
@9762263 6 жыл бұрын
супер. в закладки. спасибо!
@EasyTechnoSphere
@EasyTechnoSphere Жыл бұрын
Пять лет прошло, а ваша лекция полезна.
@java8599
@java8599 Жыл бұрын
Она была полезна и 25 лет назад :)
@ivnkhl5451
@ivnkhl5451 2 жыл бұрын
у тебя талант, продолжай снимать видео , ты изменишь людей которые учат Java
@user-tg3wl8yj3i
@user-tg3wl8yj3i 4 жыл бұрын
Коротко и по делу!!!
@user-dx9yq5js2c
@user-dx9yq5js2c 3 жыл бұрын
Класс! Очень хорошо объяснено.
@igorkorotkov9727
@igorkorotkov9727 4 жыл бұрын
Это лучшее объяснение, спасибо огромное, наконец то понял эту связку
@java8599
@java8599 4 жыл бұрын
Спасибо за добрые слова. Удачи.
@user-dh6dn1rq8r
@user-dh6dn1rq8r Жыл бұрын
Прекрасно!!!
@KirillMvS
@KirillMvS 8 ай бұрын
Спасибо за структурированное объяснение!
@RomanPochenko
@RomanPochenko 4 жыл бұрын
Добавил в закладки, отличное видео. Спасибо!
@andreypetukhov8054
@andreypetukhov8054 3 жыл бұрын
Отличное объяснение!
@ukratitelkisok9726
@ukratitelkisok9726 3 ай бұрын
Лучший!
@MiracleMasterpiece
@MiracleMasterpiece Жыл бұрын
Спасибо огромное за объяснение, как отметили в комментариях, у вас талант понятно рассказать тему!
@antonrv6269
@antonrv6269 3 жыл бұрын
Хорошее объяснение. Спасибо
@margo_lapinskaya_music
@margo_lapinskaya_music 4 жыл бұрын
спасибо! ОГРОМНОЕ.
@user-yu8hq6sg6i
@user-yu8hq6sg6i 2 жыл бұрын
замечательное видео))
@mikhaillazarev5378
@mikhaillazarev5378 2 жыл бұрын
Очень полезная информация, нужно это пересматривать.
@Bah1918
@Bah1918 4 жыл бұрын
СПАИБО ЗА УРОКИ.
@java8599
@java8599 4 жыл бұрын
Спасибо, что смотрите.
@fck2trsh
@fck2trsh 4 жыл бұрын
Отличнейший урок!
@ediego_64
@ediego_64 3 жыл бұрын
Хорошее объяснение, на простом примере
@immortal-spirit-13
@immortal-spirit-13 4 жыл бұрын
круто, спасибо большое ))
@pavelpaddubotski9779
@pavelpaddubotski9779 5 жыл бұрын
хороший и понятный урок. спасибо
@katelvova5791
@katelvova5791 3 жыл бұрын
Спасибо!!!
@AnnaSmirnova1
@AnnaSmirnova1 2 жыл бұрын
Это самое мое любимое видео на канале)
@StBrother42
@StBrother42 4 жыл бұрын
Вам подкасты вести нужно с таким голосом) приятно слушать
@user-bh5go5ci5i
@user-bh5go5ci5i 5 жыл бұрын
Спасибо!
@alexgordeeff
@alexgordeeff Жыл бұрын
Огромное спасибо что ТААК разжевали, однозначно лайк и подписка!
@alekseigrin6126
@alekseigrin6126 Жыл бұрын
ну наконец-то человек понимающий свое дело
@leonkonig5131
@leonkonig5131 3 жыл бұрын
Спасибо, в кой то веки просто и понятно все объяснено
@user-xl5ri7ut4t
@user-xl5ri7ut4t 3 жыл бұрын
здорово объяснил, спасибо
@mikhailmereminskiy7155
@mikhailmereminskiy7155 4 жыл бұрын
Я уже знал об этом. Но Ваше объяснение позволило, что называется, прочувствовать. Спасибо!
@user-wl9sf6uc5p
@user-wl9sf6uc5p 3 жыл бұрын
Супер полезно!
@elekrax
@elekrax 5 жыл бұрын
super. 10/10
@independent3253
@independent3253 3 жыл бұрын
Супер
@markifive
@markifive Жыл бұрын
Красивчик !!!
@Eliseev_Serge
@Eliseev_Serge Жыл бұрын
Так явно эта мысль мне тоже не встречалась в других источниках.
@user-eq8ny4in9c
@user-eq8ny4in9c 3 жыл бұрын
спасибо!
@user-gh9ou9ki5z
@user-gh9ou9ki5z 3 жыл бұрын
Спасибо
@user-ce3lm7sz1k
@user-ce3lm7sz1k 4 жыл бұрын
bomba!
@igothigh
@igothigh 2 жыл бұрын
Божечки мои. Вот что я искал два дня. Столько литературы перечитал на просторах интернета и пересмотрел видео, что уже потерял веру в то, что хоть кто-то объяснил почему именно нужно менять хешкод. Обычно все пишут/говорят "чтобы джава правильно сравнивала по хешкоду" - но эта фраза не дает понимания того, в какой момент и как это повлияет на нашу программу. На самом деле за два дня и сам смог додуматься, но мне важно, чтобы кто-то из опытных программистов это подтвердил своими словами)
@Aladinovich
@Aladinovich 2 жыл бұрын
Отлично объяснил, я еще читал что есть некий контракт, который говорит что если ты переопределяешь метод equals то ты должен также переопределить hashCode ну и равносильно если переопределяешь hashCode
@user-bw7oe1se2u
@user-bw7oe1se2u 5 жыл бұрын
Немного запутано но если подумать ...... лайк!
@vitalieandrusca4742
@vitalieandrusca4742 5 жыл бұрын
Mujik !!!
@themachine9329
@themachine9329 2 жыл бұрын
Хорошо рассказал, но почему не упомянул, что по умолчанию для object сравнение идёт по адресам ссылок объектов? поэтому то нам и надо переопределить equals, но ведь иногда надо сравнивать именно адреса. Переопределение hashcode необходимо когда объект будет участвовать в сравнениях где задействована эта функция, например в коллекциях - так более обще. Надо было упомянуть что Set не допускает дублирования, поэтому не добавился одинаковый элемент. Удивлен как много у тебя про Java, причём каждая тема достаточно подробно объснена - с меня подписка. Спасибо за контент.
@GuestUser-vf9qe
@GuestUser-vf9qe 5 жыл бұрын
Спасибо! Описанные здесь проблемы с перебором всех объектов коллекции будут очень хорошо проявляться с использованием Hibernate и прочего ORM-подобного при неправильном написании hashCode()
@vitalieandrusca4742
@vitalieandrusca4742 5 жыл бұрын
oigitelino!
@JeyX90
@JeyX90 4 жыл бұрын
Спасибо большое! только у вас во всем чебурнэте можно найти, уроки по таким не простым темам!
@java8599
@java8599 4 жыл бұрын
Спасибо, что заглядываете.
@jowigi4885
@jowigi4885 4 жыл бұрын
Хорошо что не Нурлан)
@alexandrkomar4741
@alexandrkomar4741 2 жыл бұрын
здравсвуйте. пришел сюда по ссылке... еще зеленый(учусь 3 месяц). не могу понять за счёт чего активизируется метод equals... выходит потому что мы просим вывести количество объектов из arraylist Set и он сразу смотрит автоматически hashcode, а потом уже если нашлись оба одинаковые hashcode активизирует метод equals?
@java8599
@java8599 2 жыл бұрын
Когда мы добавялем что-то в коллекцию, которая работает через хэш-код, сама коллекция спрашивает у добавляемого обхекта hashCode. Еще раз - мы добавляем в коллекцию методом add, а сама коллекция вызывает методы hashCode и equals у нашего объекта. Удачи :)
@alexandrkomar4741
@alexandrkomar4741 2 жыл бұрын
@@java8599 спасибо. Понял
@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 👍 да второе
@user-gl2bt1on5p
@user-gl2bt1on5p 2 жыл бұрын
Где ? Что за ситуация где "придется" сравнить два объекта ?👀
@java8599
@java8599 2 жыл бұрын
Посмотрите еще раз. С 12 минуты это проговаривается достаточно подробно. Но может вам нужны другие слова, другое объяснение - люди разные. Удачи.
@GusLapchatiy
@GusLapchatiy 3 жыл бұрын
А что если переданный объект не является MyClass? Сначала нужно проверить на то, что объект является инстанцией нужного класса, а потом проверять на равенство полей. В противном случае, метод может выкидывать ClassCastException, что будет нарушать принцип подстановки Барбары Лисков.
@java8599
@java8599 3 жыл бұрын
В принципе согласен в Вашими доводами. Просто хотелось сконцентрироваться на главной идее.
@GusLapchatiy
@GusLapchatiy 3 жыл бұрын
@@java8599 Да, но не в ущерб остальным базовым принципам и понятиям, особенно SOLID
@java8599
@java8599 3 жыл бұрын
@@GusLapchatiy Ну тут каждый решает сам - всегда нужно чуство меры. Иначе из-за леса деревьев не будет видно.
@GusLapchatiy
@GusLapchatiy 3 жыл бұрын
@@java8599 не согласен - все должно быть по правилам, а то кто-то переопределит hashcode и скажет: "Ну, пожалуй и хватит, пора и меру знать". И оставит реализацию equals() без изменений. Нет такого понятия - мера. Если что-то нужно знать и использовать, то это нужно знать и потом использовать, без оглядки на то кому чего будет где видно.
@java8599
@java8599 3 жыл бұрын
@@GusLapchatiy Ну это Ваша точка зрения. У меня другая. И что ?
@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 жыл бұрын
@@java8599 по поводу БД. Не мешайте всё в кучу. У вас тут идет разговор про переопределение public int hashCode() для джавовских обджектов. А он возвращает инт как не крути и независимо от того, сколько у вас обьектов в БД и вообще сколько обьектов вы способны нагенерировать. И это напрямую относится к контракту меду хэшкодом и иквелсом. А именно это отднонаправленный контракт. Если a.equals(b)==true, то a.hashCode()==b.hashCode(), но не наоборот. Если a.hashCode()==b.hashCode(), то не обязательно a.equals(b)==true. В этом ключ к пониманию этого контракта. :) переписывал пару раз, что бы было боле наглядно.. чуть сам не запутался.
@java8599
@java8599 5 жыл бұрын
Вы другими словами сказали то же, что и я. Просто я концентрировался на контракте, как идее - НЕравенство хэшкодов однозначно говорит о том, что объекты НЕ равны. Как это использовать - личное дело каждого.
@user-wh8ye3id7s
@user-wh8ye3id7s 2 жыл бұрын
Лучший!
@user-iq5wx7qq4v
@user-iq5wx7qq4v 3 жыл бұрын
Спасибо!
@nikolaypirozhkov9786
@nikolaypirozhkov9786 3 жыл бұрын
Спасибо!
Java. Методы equals и hashCode.
15:05
Sergey Arkhipov Java Tutorials
Рет қаралды 37 М.
MEGA BOXES ARE BACK!!!
08:53
Brawl Stars
Рет қаралды 35 МЛН
Osman Kalyoncu Sonu Üzücü Saddest Videos Dream Engine 170 #shorts
00:27
Khóa ly biệt
01:00
Đào Nguyễn Ánh - Hữu Hưng
Рет қаралды 21 МЛН
When You Get Ran Over By A Car...
00:15
Jojo Sim
Рет қаралды 11 МЛН
ООП в JavaScript. Статические методы и свойства
23:37
WebDev с нуля. Канал Алекса Лущенко
Рет қаралды 27 М.
.equals() vs. == in Java - The Real Difference
8:48
Coding with John
Рет қаралды 180 М.
Java. Класс Object. Разбор вопросов на собеседование.
21:16
Sergey Arkhipov Java Tutorials
Рет қаралды 29 М.
Дженерики в Java. Проще чем кажется.
21:36
Игорь Мешалкин
Рет қаралды 14 М.
Comparable и Comparator в Java
20:55
Тимофей Коваленко
Рет қаралды 11 М.
MEGA BOXES ARE BACK!!!
08:53
Brawl Stars
Рет қаралды 35 МЛН