Тёмный

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

Изучаем Java
Подписаться 12 тыс.
Просмотров 28 тыс.
50% 1

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

Опубликовано:

 

24 фев 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 120   
@ViktorVdovichenko
@ViktorVdovichenko 5 лет назад
Вот это уровень! Вот так знания! Спасибо ОГРОМНОЕ за информацию!
@user-tg2ep1hx1r
@user-tg2ep1hx1r 2 года назад
Единственный, кто рассказал доступно и самую суть про hashCode. Спасибо.
@AnnaSmirnova1
@AnnaSmirnova1 3 года назад
Самое крутое объяснение, которое я слышала))) Пересматриваю как готовлюсь к собеседованию
@ultradaver
@ultradaver 28 дней назад
Самое лучшее объяснение из всех
@user-zi6dm2lk5n
@user-zi6dm2lk5n 5 лет назад
Очень доходчиво объяснил, спасибо большое)
@onegin5129
@onegin5129 4 года назад
Хорошо объяснили, многие любят мусолить так что понять что то не реально
@alexandrmakarevich5334
@alexandrmakarevich5334 6 лет назад
Спасибо,это самое адекватное и понятное объяснение взаимосвязи equals() & hashCode(),которое регулярно спрашивают на собеседовании.Лайк и подписка!
@preenxus3425
@preenxus3425 5 лет назад
откуда ты знаешь? 10 месяцев назад вы наверное и собеседования-то и ни разу не проходили.
@korolcreeper
@korolcreeper Год назад
@@preenxus3425 В 2022 спрашивают на джуна
@cryptobunker9972
@cryptobunker9972 20 дней назад
@@preenxus3425 🤡
@user-jt4ol9fb2q
@user-jt4ol9fb2q 12 дней назад
Редко пишу комменты, но здесь снимаю шляпу, спасибо!
@BernabeuBlaze
@BernabeuBlaze 2 года назад
Лучшее видео про hashcode! Автору рахмет.
@gadjik_youtube
@gadjik_youtube Год назад
спасибо ! вот теперь стало понятно , зачем вообще это нужно ...
@user-dr4ji1oo2z
@user-dr4ji1oo2z 4 года назад
Без воды. Спасибо!
@kirill5988
@kirill5988 4 года назад
Частенько возвращаюсь к этому видео по ходу обучения, очень годно, спасибо!
@danilasar
@danilasar 4 года назад
Простое и грамотное объяснение. Большое спасибо за Ваш труд!
@synarge2027
@synarge2027 Год назад
Спасибо тебе огромное! Вот теперь у меня появилось полное понимание для чего нужен и как работает hashCode Лучший!
@Nidvoraich
@Nidvoraich Год назад
Спасибо! Действительно, очень полезно
@muhammadalirasuljonov799
@muhammadalirasuljonov799 2 года назад
Я видел много видео про equals и hashcode, но это самое понятное
@ivnkhl5451
@ivnkhl5451 2 года назад
у тебя талант, продолжай снимать видео , ты изменишь людей которые учат Java
@Mr.GhosTMG
@Mr.GhosTMG 2 года назад
Лучшее объяснение ! Для чего они и с чем их готовят! Спасибо!
@yeson6581
@yeson6581 2 года назад
Спасибо, Антон! Очень классное и понятное объяснение! И расставлены все нужные акценты на действительно важной информации.
@StBrother42
@StBrother42 3 года назад
Вам подкасты вести нужно с таким голосом) приятно слушать
@---mg7yi
@---mg7yi 6 лет назад
Спасибо за Ваш труд!!!
@Vadim_Sotnikov
@Vadim_Sotnikov 4 года назад
Очень хорошее объяснение, спасибо Вам большое!
@igothigh
@igothigh 2 года назад
Божечки мои. Вот что я искал два дня. Столько литературы перечитал на просторах интернета и пересмотрел видео, что уже потерял веру в то, что хоть кто-то объяснил почему именно нужно менять хешкод. Обычно все пишут/говорят "чтобы джава правильно сравнивала по хешкоду" - но эта фраза не дает понимания того, в какой момент и как это повлияет на нашу программу. На самом деле за два дня и сам смог додуматься, но мне важно, чтобы кто-то из опытных программистов это подтвердил своими словами)
@user-mh4jq8rr7i
@user-mh4jq8rr7i 3 года назад
Такой валенок как я даже понял! Спасибо огромное!
@dariadandria4112
@dariadandria4112 3 года назад
Прекрасное обьяснение, понятно и доходчиво, без лишней воды!
@IuliiaDalskaia
@IuliiaDalskaia 4 года назад
Спасибо Вам, добрый человек!)
@EasyTechnoSphere
@EasyTechnoSphere Год назад
Пять лет прошло, а ваша лекция полезна.
@java8599
@java8599 Год назад
Она была полезна и 25 лет назад :)
@user-bs3mo9wz3h
@user-bs3mo9wz3h 2 года назад
С меня лайк и подписка) Очень качественно,без воды)все просто,понятно,и доходчиво!)
@user-yo7mw6oj4p
@user-yo7mw6oj4p 6 лет назад
Спасибо. Очень информативно.
@agentr227
@agentr227 2 года назад
Отличное видео 👍
@mikhailmereminskiy7155
@mikhailmereminskiy7155 4 года назад
Я уже знал об этом. Но Ваше объяснение позволило, что называется, прочувствовать. Спасибо!
@MiracleMasterpiece
@MiracleMasterpiece Год назад
Спасибо огромное за объяснение, как отметили в комментариях, у вас талант понятно рассказать тему!
@user-gb3zo3kr3x
@user-gb3zo3kr3x 6 месяцев назад
Отличное объяснение, спасибо за труд!
@MrSBFI
@MrSBFI 6 лет назад
как всегда толково, с расстановкой, по полочкам, спасибо
@Eliseev_Serge
@Eliseev_Serge Год назад
Так явно эта мысль мне тоже не встречалась в других источниках.
@user-yu8hq6sg6i
@user-yu8hq6sg6i 2 года назад
замечательное видео))
@vladfedos5554
@vladfedos5554 3 года назад
Огромное спасибо, очень полезная информация
@mikhaillazarev5378
@mikhaillazarev5378 2 года назад
Очень полезная информация, нужно это пересматривать.
@AnnaSmirnova1
@AnnaSmirnova1 2 года назад
Это самое мое любимое видео на канале)
@KirillMvS
@KirillMvS 7 месяцев назад
Спасибо за структурированное объяснение!
@user-dh6dn1rq8r
@user-dh6dn1rq8r Год назад
Прекрасно!!!
@igorkorotkov9727
@igorkorotkov9727 4 года назад
Это лучшее объяснение, спасибо огромное, наконец то понял эту связку
@java8599
@java8599 4 года назад
Спасибо за добрые слова. Удачи.
@mpchest1
@mpchest1 3 года назад
Автор, ты просто боженька!
@volodymyr3322
@volodymyr3322 4 года назад
Просто бомба. Спасибо за четкое обьяснение
@alekseigrin6126
@alekseigrin6126 Год назад
ну наконец-то человек понимающий свое дело
@9762263
@9762263 6 лет назад
супер. в закладки. спасибо!
@RomanPochenko
@RomanPochenko 4 года назад
Добавил в закладки, отличное видео. Спасибо!
@Twinky009
@Twinky009 3 года назад
Спасибо огромное, все очень четко и по делу!!!!!
@ukratitelkisok9726
@ukratitelkisok9726 2 месяца назад
Лучший!
@NeXus-zb4zh
@NeXus-zb4zh 5 лет назад
отличное объяснение, спасибо
@user-dx9yq5js2c
@user-dx9yq5js2c 3 года назад
Класс! Очень хорошо объяснено.
@hr0fft
@hr0fft 3 года назад
Отличное объяснение, спасибо!
@pavelpaddubotski9779
@pavelpaddubotski9779 4 года назад
хороший и понятный урок. спасибо
@ediego_64
@ediego_64 3 года назад
Хорошее объяснение, на простом примере
@alexgordeeff
@alexgordeeff Год назад
Огромное спасибо что ТААК разжевали, однозначно лайк и подписка!
@antonrv6269
@antonrv6269 3 года назад
Хорошее объяснение. Спасибо
@andreypetukhov8054
@andreypetukhov8054 3 года назад
Отличное объяснение!
@themachine9329
@themachine9329 2 года назад
Хорошо рассказал, но почему не упомянул, что по умолчанию для object сравнение идёт по адресам ссылок объектов? поэтому то нам и надо переопределить equals, но ведь иногда надо сравнивать именно адреса. Переопределение hashcode необходимо когда объект будет участвовать в сравнениях где задействована эта функция, например в коллекциях - так более обще. Надо было упомянуть что Set не допускает дублирования, поэтому не добавился одинаковый элемент. Удивлен как много у тебя про Java, причём каждая тема достаточно подробно объснена - с меня подписка. Спасибо за контент.
@Aladinovich
@Aladinovich Год назад
Отлично объяснил, я еще читал что есть некий контракт, который говорит что если ты переопределяешь метод equals то ты должен также переопределить hashCode ну и равносильно если переопределяешь hashCode
@Bah1918
@Bah1918 4 года назад
СПАИБО ЗА УРОКИ.
@java8599
@java8599 4 года назад
Спасибо, что смотрите.
@leonkonig5131
@leonkonig5131 3 года назад
Спасибо, в кой то веки просто и понятно все объяснено
@margo_lapinskaya_music
@margo_lapinskaya_music 4 года назад
спасибо! ОГРОМНОЕ.
@user-tg3wl8yj3i
@user-tg3wl8yj3i 4 года назад
Коротко и по делу!!!
@fck2trsh
@fck2trsh 4 года назад
Отличнейший урок!
@markifive
@markifive Год назад
Красивчик !!!
@user-bh5go5ci5i
@user-bh5go5ci5i 5 лет назад
Спасибо!
@katelvova5791
@katelvova5791 3 года назад
Спасибо!!!
@immortal-spirit-13
@immortal-spirit-13 4 года назад
круто, спасибо большое ))
@user-wl9sf6uc5p
@user-wl9sf6uc5p 3 года назад
Супер полезно!
@user-xl5ri7ut4t
@user-xl5ri7ut4t 3 года назад
здорово объяснил, спасибо
@independent3253
@independent3253 3 года назад
Супер
@user-bw7oe1se2u
@user-bw7oe1se2u 5 лет назад
Немного запутано но если подумать ...... лайк!
@elekrax
@elekrax 5 лет назад
super. 10/10
@user-gh9ou9ki5z
@user-gh9ou9ki5z 3 года назад
Спасибо
@user-eq8ny4in9c
@user-eq8ny4in9c 3 года назад
спасибо!
@user-ce3lm7sz1k
@user-ce3lm7sz1k 4 года назад
bomba!
@GuestUser-vf9qe
@GuestUser-vf9qe 5 лет назад
Спасибо! Описанные здесь проблемы с перебором всех объектов коллекции будут очень хорошо проявляться с использованием Hibernate и прочего ORM-подобного при неправильном написании hashCode()
@vitalieandrusca4742
@vitalieandrusca4742 5 лет назад
oigitelino!
@JeyX90
@JeyX90 4 года назад
Спасибо большое! только у вас во всем чебурнэте можно найти, уроки по таким не простым темам!
@java8599
@java8599 4 года назад
Спасибо, что заглядываете.
@vitalieandrusca4742
@vitalieandrusca4742 5 лет назад
Mujik !!!
@alexandrkomar4741
@alexandrkomar4741 2 года назад
здравсвуйте. пришел сюда по ссылке... еще зеленый(учусь 3 месяц). не могу понять за счёт чего активизируется метод equals... выходит потому что мы просим вывести количество объектов из arraylist Set и он сразу смотрит автоматически hashcode, а потом уже если нашлись оба одинаковые hashcode активизирует метод equals?
@java8599
@java8599 2 года назад
Когда мы добавялем что-то в коллекцию, которая работает через хэш-код, сама коллекция спрашивает у добавляемого обхекта hashCode. Еще раз - мы добавляем в коллекцию методом add, а сама коллекция вызывает методы hashCode и equals у нашего объекта. Удачи :)
@alexandrkomar4741
@alexandrkomar4741 2 года назад
@@java8599 спасибо. Понял
@jowigi4885
@jowigi4885 4 года назад
Хорошо что не Нурлан)
@user-gl2bt1on5p
@user-gl2bt1on5p 2 года назад
Где ? Что за ситуация где "придется" сравнить два объекта ?👀
@java8599
@java8599 2 года назад
Посмотрите еще раз. С 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 👍 да второе
@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 года назад
Спасибо!
Далее
Smart Sigma Kid #funny #sigma #comedy
00:19
Просмотров 6 млн
Java. Методы equals и hashCode.
15:05
Просмотров 37 тыс.
Java с нуля. Методы
20:22
Просмотров 5 тыс.
Java SE. Урок 18. Модификатор static
9:21
.equals() vs. == in Java - The Real Difference
8:48
Просмотров 178 тыс.