Java. Методы equals и hashCode.

  Рет қаралды 37,594

Sergey Arkhipov Java Tutorials

Sergey Arkhipov Java Tutorials

5 жыл бұрын

Рассматриваем методы equals и hashCode, для чего они предназначены, как работают, какая между ними взаимосвязь, как они влияют на работу коллекций.
Исходники:
github.com/Arhiser/java_tutor...
Поддержать канал💰:
yoomoney.ru/to/410018856244871
#ArhiTutorialsJava #ityoutubersru

Пікірлер: 107
@user-li2cw9wf1f
@user-li2cw9wf1f 10 күн бұрын
Спасибо! Всегда с большим удовольствием смотрю ваши видео!
@user-pq6os6gw8b
@user-pq6os6gw8b 4 жыл бұрын
Коротко, лаконично, по делу!!! Спасибо тебе добрый человек
@arhitutorials
@arhitutorials 4 жыл бұрын
Спасибо за поддержку!
@tweak7708
@tweak7708 Жыл бұрын
@@arhitutorials подскажите пожалуйста , как IDEA автоматически переопределяет методы как у Вас. У меня при переопределении выходит все по стандарту. @Override public String toString() { return super.toString()} @Override public int hashCode() { return super.hashCode() } Понимаю может вопрос тупой , поэтому заранее извиняюсь... А так в целом все последовательно и понятно , спасибо.
@RumEvo
@RumEvo Жыл бұрын
@@tweak7708 если я не ошибаюсь, вариант в видео был сделан ручную
@YoungRembo
@YoungRembo 2 ай бұрын
@@tweak7708 если ты работаешь в Intellij IDEA то нажми Alt + Insert и выбери соответствующий пункт
@danchenski9434
@danchenski9434 10 ай бұрын
Мужик, просто громадное спасибо, который раз меня уже выручаешь!!!
@ivans7690
@ivans7690 3 жыл бұрын
Тот случай, когда видео нужно СМОТРЕТЬ ДО КОНЦА! Самое вкусное (и полезное) в концовке!
@ermilovnik
@ermilovnik 3 жыл бұрын
Спасибо за твои видео, все понятно без лишней воды
@antonignatenko7776
@antonignatenko7776 2 жыл бұрын
дай бог тебе здоровья, спасибо за такое отличное объяснение
@alex_danich
@alex_danich 3 жыл бұрын
Красавчик! Коротко и ясно, как и надо.
@divergenny
@divergenny 2 жыл бұрын
Благодарю за ваши труды
@sanix183
@sanix183 Жыл бұрын
Сергей, ты большой молодец! Спасибо!
@smthsmth111
@smthsmth111 3 жыл бұрын
Спасибо за видео. Очень доходчиво объясняется принципы работы этих методов, всё понятно 👍
@severustvr8202
@severustvr8202 Жыл бұрын
15 минут и все понятно. Спасибо за труд!
@berkana8731
@berkana8731 4 жыл бұрын
Благодарю за грамотную подачу материала, пояснение ньюансов и доступность исходников☺ ☺ ☺ Очень помагает наличие теоретической составляющей, а не просто кода!
@whatyoumean1498
@whatyoumean1498 Ай бұрын
Не жалко потратить время и настрочить комментарий) Спасибо, очень полезное и приятное видео.
@musiclife2641
@musiclife2641 2 жыл бұрын
Спасибо за Ваши старания, один из ЛУЧШИХ каналов про программирование для новичков)
@user-mt9kf4mi7x
@user-mt9kf4mi7x Жыл бұрын
Восхитительное объяснение!
@user-qb3hq3mv2d
@user-qb3hq3mv2d Жыл бұрын
Классное видео. Очень понятно и интересно. Спасибо большое !
@user-gv3zn1us6s
@user-gv3zn1us6s Жыл бұрын
Просто Гуру! Спокойный, наглядный и понятный стиль изложения материала. Нечасто такое можно встретить
@Lok1goD
@Lok1goD 3 жыл бұрын
Огонь! Отличные примеры, лучшее что я нашел на просторах ютуба! Спасибо молодой человек! От меня лойс и подписка!
@Antares19871
@Antares19871 3 жыл бұрын
Спасибо за видео. Очень понятно рассказали.
@Krasnolesye
@Krasnolesye 2 жыл бұрын
Видео, которое закрывает все пробелы в этой области. С удовольствием посмотрел. Молодца!
@user-ry4oe7es1p
@user-ry4oe7es1p 4 жыл бұрын
Спасибо, очень помог. Лайк, подписка.
@user-bn9wc8db6s
@user-bn9wc8db6s 2 жыл бұрын
Всем доброго дня! Обращаюсь к автору: я пересмотрел множество различных видео уроков, Ваши как минимум одни из лучших!!! Если у Вас будет время и желание, сделайте уроки по Java для начинающих. Уверен, что многие оценят!!!
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Жыл бұрын
Отличные уроки. Спасибо
@maksimsimakou3848
@maksimsimakou3848 3 жыл бұрын
Хорошее объяснение! Спасибо!
@nicholaswhite7351
@nicholaswhite7351 3 ай бұрын
Очень хорошая подача материала. Огромное спасибо. Всех баг автору.
@alexeymarkvart
@alexeymarkvart Жыл бұрын
Отличное объяснение! Спасибо
@catalina8984
@catalina8984 4 жыл бұрын
Хорошее объяснение, спасибо
@alexpushkarev8003
@alexpushkarev8003 Жыл бұрын
благодарю, очень доходчиво объяснил
@user-vb7bs3eq4s
@user-vb7bs3eq4s 3 жыл бұрын
Спасибо! Толково.
@_Yar_
@_Yar_ 2 жыл бұрын
Супер! Спасибо!
@evgenyivanov744
@evgenyivanov744 3 жыл бұрын
спасибо сергей!
@djadjaandrey
@djadjaandrey 3 ай бұрын
Спасибо за видео!
@BessRS
@BessRS 3 жыл бұрын
Открыл глаза,спасибо
@dmitrysmirnov9449
@dmitrysmirnov9449 3 жыл бұрын
Сергей, добавь возможность донатить ) Очень ценные видео, спасибо большое!
@filsdepers
@filsdepers Жыл бұрын
Спасибо❤
@igortarasov4482
@igortarasov4482 Жыл бұрын
Счастья, здоровья, жену послушную
@anastasiabruks9700
@anastasiabruks9700 2 жыл бұрын
как вы так хитро выделили все нужные для изменения поля result и поменяли их на hash? какие клавиши зажимать?)
@user-zh6ei3xh8f
@user-zh6ei3xh8f 3 жыл бұрын
спасибо)
@maxbasov5485
@maxbasov5485 2 жыл бұрын
Только начал учить Java и сразу влюбился в этот язык за его строгость и предсказумость, а тут это!!)))) НУ ЗАЧЕМ?)) Есть все таки что-то от сатаны в этих языках с приставкой Java ))
@arhitutorials
@arhitutorials 2 жыл бұрын
А по моему, все логично) Это вы еще видео про ковариантность/контравариантность не смотрели 😅
@johannesbrown8853
@johannesbrown8853 5 жыл бұрын
Очень доступно объясняешь. Спасибо! Продолжай в том же духе))) возможно лично или в соц сетях задавать вопросы о непонятных вещах в Java?
@arhitutorials
@arhitutorials 5 жыл бұрын
Спасибо! Стараюсь) Конечно возможно. Только отвечаю иногда долго, потому что работа. Так же, если будет интересен Android, могу помочь с обучением: ответы на вопросы, задачи, code review, и все в таком духе.
@johannesbrown8853
@johannesbrown8853 5 жыл бұрын
Sergey Arkhipov Спасибо большое! Android планирую немного попозже. Сейчас конкретно практикую Java Core. Так как цель устроиться на Junior. Возможно по Java делать code review?)
@arhitutorials
@arhitutorials 5 жыл бұрын
@@johannesbrown8853 упаковывай проект в zip и присылай на почту arhiser@gmail.com. Посмотрю и напишу отзыв.
@johannesbrown8853
@johannesbrown8853 5 жыл бұрын
Sergey Arkhipov спасибо!
@XIRON86
@XIRON86 2 жыл бұрын
Интересный канал. Подписался. Хотел бы узнать, что необходимо знать, чтобы найти работу на вакансию java junior'a.
@xaxelpx
@xaxelpx Жыл бұрын
У меня IDEA совсем в другом виде переопределила equals и hashCode. В методе hashCode вообще нет реализации, как на этом видео, только 'return Objects.hash(a, b)'.
@NikolaiStiazhkin
@NikolaiStiazhkin 11 ай бұрын
Только так можно достичь Дзена )))
@SergiVRN
@SergiVRN Жыл бұрын
А какие пункты Вы выбирали при автогенерации? или вы руками добавили 31?
@simplechannel7859
@simplechannel7859 4 жыл бұрын
♥👍📹
@user-pg9jm5wf5w
@user-pg9jm5wf5w 3 жыл бұрын
Здравствуйте, спасибо за контент, все доступно объясняете! Только у меня вопрос обязательно ли что б equals и hashcode использовали одинаковые поля? т.е. можно ли высчитывать хэшкод по одному полю а сравнивать в equals по трем полям?
@arhitutorials
@arhitutorials 3 жыл бұрын
Все можно, только надо отдавать себе отчет, зачем это делать. А то так можно дойти до ситуации, когда объекты, равные по equals, будут иметь разный хеш-код. Тогда уже нельзя будет рассчитывать на то, что если хэш-код объектов разный то и объекты тоже разные. А значит equals() и hashcode() больше не согласованы и совместно не работают.
@user-pg9jm5wf5w
@user-pg9jm5wf5w 3 жыл бұрын
@@arhitutorials Спасибо! Теперь точно понял)
@tonyp4826
@tonyp4826 Жыл бұрын
А про instanceof было уже где то? Почему this без точки и переменной?
@alexandrkomar4741
@alexandrkomar4741 Жыл бұрын
Здравствуйте. получается что hashCode and equals вы переопределили сразу в видео на 4:13 минуте? и как на 11:05 вы выделили все слова и заменили их все одновременно?
@nikolas2814
@nikolas2814 5 жыл бұрын
Сделайте, пожалуйста, плейлисты
@arhitutorials
@arhitutorials 5 жыл бұрын
Ок, сделаю в ближайшее время
@nikolas2814
@nikolas2814 5 жыл бұрын
@@arhitutorials спасибо))
@altayski3704
@altayski3704 2 жыл бұрын
Приветствую! Сергей, если будет возможность показать перевод из двоичной системы в шестнадцатеричную минуя заход в десятичную.
@arhitutorials
@arhitutorials 2 жыл бұрын
Привет. Есть идея сделать разбор алгоритма, который переводит числа из любой системы в любую. Как-нибудь сделаю.
@altayski3704
@altayski3704 2 жыл бұрын
@@arhitutorials О-О-о, интересно бы было. Я с JavRush иду по курсу, сюда пришел когда искал поиск второго минимального элемента в массиве. Сделал задачу перевода из двоичного в шестнадцатеричного через десятичное, вывод результата как надо, но некоторые пункты не проходили. Подписан, так что увижу если что.
@telephon3208
@telephon3208 Жыл бұрын
слышала, что hashcode вычисляется лениво. поэтому перемещение объекта на другой адрес в памяти не меняет хэш
@arhitutorials
@arhitutorials Жыл бұрын
Вроде как да, один раз берется текущий адрес при первом запоосе, а потом все время выдаётся, даже если объект уехал в другое место.
@kensaitakeso
@kensaitakeso 2 жыл бұрын
Сергей, у меня такой вопрос, а почему в качестве кода hashCode не использовать например UUID? разве это не поможет избежать коллизий? или тут вопрос скорее в том на основе чего генерируется хэш?
@arhitutorials
@arhitutorials 2 жыл бұрын
Два объекта с одинаковыми данными должны иметь одинаковые хэши. Это одно из свойств хэш функции. По этому просто так раздать всем UUID нельзя, надо генерировать на основе данных объекта.
@kensaitakeso
@kensaitakeso 2 жыл бұрын
@@arhitutorialsда, я понял. хеш генерится на основе данных. но тогда логичным думаю было бы использование md5, sha255 or crc32. или это просто долго?
@Duskmage1991
@Duskmage1991 4 жыл бұрын
Привет землякам))Можно ли позадавать иногда вопросы по джаве и по андроиду в личку ?)
@arhitutorials
@arhitutorials 4 жыл бұрын
Привет, можно. На главной странице есть ссылка на фейсбук, можно туда писать. Я вообще думаю, не создать ли нам сообщество или канал в телеграмме, чтоб было удобнее обсуждать вопросы, делиться новостями и т.д. Как вам идея?)
@Duskmage1991
@Duskmage1991 4 жыл бұрын
@@arhitutorials идея хорошая)думаю телеграмм канал было бы неплохо , ну и дискорд тоже можно)
@Duskmage1991
@Duskmage1991 4 жыл бұрын
@@arhitutorials вы уже создали телеграмм канал или дискорд ?можно ссылку пожалуйста)
@arhitutorials
@arhitutorials 4 жыл бұрын
@@Duskmage1991 Создал группу в Telegram: t.me/ArhiTutorials Добавил ссылку в шапку канала. Теперь будет у нас место для неформального общения, вопросов, взаимопомощи, новостей и прочего. Буду продвигать группу по мере возможности.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Жыл бұрын
Спасибо. Позволю себе небольшой совет для шлифовки - можно чуть улучшить читабельность если поменять имена. Например вместо: *contacts.contains(contact2)* сделать: *phones.contains(Ivan)*
@priest774
@priest774 Жыл бұрын
Так точно не лучше
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Жыл бұрын
@@priest774 точно лучше, потому что имена переменных и методов не похожи друг на друга как братья близнецы
@priest774
@priest774 Жыл бұрын
@@Das.Kleine.Krokodil это да, только читабельность кода и читабельность текста это не одно и то же. Ваш пример это каша. Сущность contact содержит набор данных: имя, телефон, адрес и т.д. соответственно contacts это коллекция сущностей contact, поэтому contacts.contains(contact) читается понятно и логично. А phones.contacts(Ivan) читается как телефоны содержат Ивана, какая связь вообще непонятно
@alessandrostepanov2145
@alessandrostepanov2145 3 жыл бұрын
Кажется начинает проясняться. Что еще важно знать на собеседовании?
@Dmitri915
@Dmitri915 Жыл бұрын
как он сделал с 11:06 чтоб выделить и стереть сразу несколько частей и на место их добавит новый текст?
@Dmitri915
@Dmitri915 Жыл бұрын
неделя прошла, пока тишина((
@1SkyMan11
@1SkyMan11 Жыл бұрын
вероятно alt +j для выбора alt +shift+j для отмены
@1SkyMan11
@1SkyMan11 Жыл бұрын
@@Dmitri915 ctrl +ctrl +up or down и каретка клонируется
@nameunknown-ut8jm
@nameunknown-ut8jm 2 жыл бұрын
Здравствуйте. Можете поподробнее объяснить на 4:27 " Contact contact = (Contact ) o " ! Вы об этом ничего не сказали. Так как от этой строки (которую я недопонял) идёт дальше построение кода на сравнение итд
@arhitutorials
@arhitutorials 2 жыл бұрын
В сигнатуре метода equals параметр имеет тип Object, что даёт возможность сравнивать на equals объекты разных типов. В подавляющем большинстве случаев это не нужно, по этому в методе сразу проверяется, что аргумент имеет тот же тип. Если да, то аргумент приводится к соответствующему типу, contact = (Contact) o; И дальше уже идёт логика сравнения полей объектов.
@nameunknown-ut8jm
@nameunknown-ut8jm 2 жыл бұрын
@@arhitutorials спасибо
@gordanov
@gordanov 3 жыл бұрын
11:08 можно shortcut
@arhitutorials
@arhitutorials 3 жыл бұрын
Alt + Shift + клик на нужное место в коде. Делал отдельное видео по этой фиче: kzfaq.info/get/bejne/b81mhrNhr6rehWg.html
@user-yp4tc3lz9h
@user-yp4tc3lz9h 2 жыл бұрын
объясните строчку Contact contact = (Contact) o;
@arhitutorials
@arhitutorials 2 жыл бұрын
Это приведение типа переменной o к типу Contact. Функция equals имеет следующую сигнатуру: public boolean equals(Object o); - то есть, может принимать в качестве параметра объект любого типа. По этому внутри нужна проверка и приведение: if (!(o instanceof Contact)) return false; Contact contact = (Contact) o; А дальше, если нам передали объект типа Contact, тогда уже проверяем отдельные поля.
@vitaliilapov3498
@vitaliilapov3498 3 жыл бұрын
Чому ти оголошував клас Contact статичним? в чому різниця з НЕ статичним класом?
@user-hz5qh1js7h
@user-hz5qh1js7h 3 күн бұрын
Вложенные класс
@anjelomanoranjan
@anjelomanoranjan 9 ай бұрын
Спасибо, Серега. Слава Украине!
@EdwardNorthwind
@EdwardNorthwind Жыл бұрын
Я вот только одного понять не могу, какого хрена в Set нет метода get()?!?! Ну положил я в Set данные, и что мне дальше с ним делать? Любоваться? Как вообще можно было так ступить и не дать возможности забирать элементы из коллекции. А нововведенный Record? Молодцы, сделали Immuteble класс, но кто вас просил закрывать его от рефлексии? Что мешало добавить final и только тогда делать Record immuteble? А вот без неё - это простой POJO класс. И вместо повсеместного использования - их удел DTO, а народ продолжает использовать Lombok. А как бы шикарно record`ы смотрелись бы... да везде. Просирать полимеры это прям талант.
@mykola.artemov
@mykola.artemov Жыл бұрын
что за корзины?
@arhitutorials
@arhitutorials Жыл бұрын
Это речь про устройство хэш-таблицы. В ней элементы раскладываются по нескольким контейнерам в зависимости от значение хэш-кода.
@user-lp8lt6ju4j
@user-lp8lt6ju4j 2 жыл бұрын
Да черт с иквелсом, ты лучше скажи как ты сразу несколько строк отформатировал)))
@svetlanavydrina414
@svetlanavydrina414 3 жыл бұрын
"Икьюалс" 🤦‍♀️🤦‍♀️
@arhitutorials
@arhitutorials 3 жыл бұрын
А Вы бы как сказали? Икуалс, иквалс?))
@svetlanavydrina414
@svetlanavydrina414 3 жыл бұрын
@@arhitutorials транскрипция ['iːkwəlz], то есть да, "иквалз" норм было бы
@kergshi9847
@kergshi9847 7 ай бұрын
пи*дец,вообще ничего не понял,откуда что берется(
@user-nv3fv3vv9l
@user-nv3fv3vv9l Жыл бұрын
я один абсолютно не розумію логіки 2 останніх строчок коду в оверайді іквелс? Типу якщо ім'я не нал то ім'я не дорівнює самому собі, а якщо ім'я налл то воно не нал? Шо за херня , з хешкодом все ясно
@RumEvo
@RumEvo Жыл бұрын
if(если результат любого метода вернет true) то выполнится код после, а после прописано return false то есть, если внутри if мы по equals получили true, то возвращать false будет не правильно, поэтому приводим true к false таким образом (!true = false) сам долго голову бил...
Java. Работа с датой и временем.
18:21
Sergey Arkhipov Java Tutorials
Рет қаралды 10 М.
Java. Класс Object. Разбор вопросов на собеседование.
21:16
Sergey Arkhipov Java Tutorials
Рет қаралды 30 М.
Nutella bro sis family Challenge 😋
00:31
Mr. Clabik
Рет қаралды 8 МЛН
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 4,6 МЛН
Became invisible for one day!  #funny #wednesday #memes
00:25
Watch Me
Рет қаралды 45 МЛН
That's how money comes into our family
00:14
Mamasoboliha
Рет қаралды 5 МЛН
Выпуск 22. hashCode() и equals() - самое главное.
21:16
Изучаем Java
Рет қаралды 28 М.
Hidden Beauties of Java Enums
22:20
Frank Delporte
Рет қаралды 12 М.
.equals() vs. == in Java - The Real Difference
8:48
Coding with John
Рет қаралды 180 М.
Урок 14 - Методы equals и hashCode (прокачанная Java)
19:25
Програмания
Рет қаралды 23 М.
Redis за 20 минут
23:22
suchkov tech
Рет қаралды 106 М.
Java. Лямбда-выражения.
23:47
Sergey Arkhipov Java Tutorials
Рет қаралды 32 М.
Урок Java 156: переопределение equals
16:10
Уроки Java
Рет қаралды 7 М.
Nutella bro sis family Challenge 😋
00:31
Mr. Clabik
Рет қаралды 8 МЛН