Тёмный

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

Sergey Arkhipov Java Tutorials
Подписаться 20 тыс.
Просмотров 37 тыс.
50% 1

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

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

 

18 май 2019

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 105   
@whatyoumean1498
@whatyoumean1498 13 дней назад
Не жалко потратить время и настрочить комментарий) Спасибо, очень полезное и приятное видео.
@danchenski9434
@danchenski9434 9 месяцев назад
Мужик, просто громадное спасибо, который раз меня уже выручаешь!!!
@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 Месяц назад
@@tweak7708 если ты работаешь в Intellij IDEA то нажми Alt + Insert и выбери соответствующий пункт
@ivans7690
@ivans7690 3 года назад
Тот случай, когда видео нужно СМОТРЕТЬ ДО КОНЦА! Самое вкусное (и полезное) в концовке!
@djadjaandrey
@djadjaandrey 2 месяца назад
Спасибо за видео!
@nicholaswhite7351
@nicholaswhite7351 Месяц назад
Очень хорошая подача материала. Огромное спасибо. Всех баг автору.
@anastasiabruks9700
@anastasiabruks9700 2 года назад
как вы так хитро выделили все нужные для изменения поля result и поменяли их на hash? какие клавиши зажимать?)
@user-gv3zn1us6s
@user-gv3zn1us6s Год назад
Просто Гуру! Спокойный, наглядный и понятный стиль изложения материала. Нечасто такое можно встретить
@musiclife2641
@musiclife2641 2 года назад
Спасибо за Ваши старания, один из ЛУЧШИХ каналов про программирование для новичков)
@user-bn9wc8db6s
@user-bn9wc8db6s 2 года назад
Всем доброго дня! Обращаюсь к автору: я пересмотрел множество различных видео уроков, Ваши как минимум одни из лучших!!! Если у Вас будет время и желание, сделайте уроки по Java для начинающих. Уверен, что многие оценят!!!
@Lok1goD
@Lok1goD 3 года назад
Огонь! Отличные примеры, лучшее что я нашел на просторах ютуба! Спасибо молодой человек! От меня лойс и подписка!
@berkana8731
@berkana8731 3 года назад
Благодарю за грамотную подачу материала, пояснение ньюансов и доступность исходников☺ ☺ ☺ Очень помагает наличие теоретической составляющей, а не просто кода!
@smthsmth111
@smthsmth111 3 года назад
Спасибо за видео. Очень доходчиво объясняется принципы работы этих методов, всё понятно 👍
@user-ry4oe7es1p
@user-ry4oe7es1p 4 года назад
Спасибо, очень помог. Лайк, подписка.
@ermilovnik
@ermilovnik 3 года назад
Спасибо за твои видео, все понятно без лишней воды
@divergenny
@divergenny 2 года назад
Благодарю за ваши труды
@severustvr8202
@severustvr8202 11 месяцев назад
15 минут и все понятно. Спасибо за труд!
@Krasnolesye
@Krasnolesye 2 года назад
Видео, которое закрывает все пробелы в этой области. С удовольствием посмотрел. Молодца!
@user-mt9kf4mi7x
@user-mt9kf4mi7x Год назад
Восхитительное объяснение!
@Antares19871
@Antares19871 3 года назад
Спасибо за видео. Очень понятно рассказали.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Год назад
Отличные уроки. Спасибо
@alex_danich
@alex_danich 3 года назад
Красавчик! Коротко и ясно, как и надо.
@sanix183
@sanix183 Год назад
Сергей, ты большой молодец! Спасибо!
@igortarasov4482
@igortarasov4482 Год назад
Счастья, здоровья, жену послушную
@maksimsimakou3848
@maksimsimakou3848 3 года назад
Хорошее объяснение! Спасибо!
@antonignatenko7776
@antonignatenko7776 2 года назад
дай бог тебе здоровья, спасибо за такое отличное объяснение
@user-qb3hq3mv2d
@user-qb3hq3mv2d Год назад
Классное видео. Очень понятно и интересно. Спасибо большое !
@catalina8984
@catalina8984 4 года назад
Хорошее объяснение, спасибо
@alexeymarkvart
@alexeymarkvart 10 месяцев назад
Отличное объяснение! Спасибо
@alexpushkarev8003
@alexpushkarev8003 Год назад
благодарю, очень доходчиво объяснил
@evgenyivanov744
@evgenyivanov744 3 года назад
спасибо сергей!
@filsdepers
@filsdepers Год назад
Спасибо❤
@user-vb7bs3eq4s
@user-vb7bs3eq4s 3 года назад
Спасибо! Толково.
@_Yar_
@_Yar_ 2 года назад
Супер! Спасибо!
@dmitrysmirnov9449
@dmitrysmirnov9449 3 года назад
Сергей, добавь возможность донатить ) Очень ценные видео, спасибо большое!
@BessRS
@BessRS 3 года назад
Открыл глаза,спасибо
@SergiVRN
@SergiVRN Год назад
А какие пункты Вы выбирали при автогенерации? или вы руками добавили 31?
@user-zh6ei3xh8f
@user-zh6ei3xh8f 3 года назад
спасибо)
@xaxelpx
@xaxelpx Год назад
У меня IDEA совсем в другом виде переопределила equals и hashCode. В методе hashCode вообще нет реализации, как на этом видео, только 'return Objects.hash(a, b)'.
@XIRON86
@XIRON86 2 года назад
Интересный канал. Подписался. Хотел бы узнать, что необходимо знать, чтобы найти работу на вакансию java junior'a.
@maxbasov5485
@maxbasov5485 2 года назад
Только начал учить Java и сразу влюбился в этот язык за его строгость и предсказумость, а тут это!!)))) НУ ЗАЧЕМ?)) Есть все таки что-то от сатаны в этих языках с приставкой Java ))
@arhitutorials
@arhitutorials 2 года назад
А по моему, все логично) Это вы еще видео про ковариантность/контравариантность не смотрели 😅
@alexandrkomar4741
@alexandrkomar4741 10 месяцев назад
Здравствуйте. получается что hashCode and equals вы переопределили сразу в видео на 4:13 минуте? и как на 11:05 вы выделили все слова и заменили их все одновременно?
@tonyp4826
@tonyp4826 Год назад
А про instanceof было уже где то? Почему this без точки и переменной?
@NikolaiStiazhkin
@NikolaiStiazhkin 10 месяцев назад
Только так можно достичь Дзена )))
@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 спасибо!
@user-pg9jm5wf5w
@user-pg9jm5wf5w 3 года назад
Здравствуйте, спасибо за контент, все доступно объясняете! Только у меня вопрос обязательно ли что б equals и hashcode использовали одинаковые поля? т.е. можно ли высчитывать хэшкод по одному полю а сравнивать в equals по трем полям?
@arhitutorials
@arhitutorials 3 года назад
Все можно, только надо отдавать себе отчет, зачем это делать. А то так можно дойти до ситуации, когда объекты, равные по equals, будут иметь разный хеш-код. Тогда уже нельзя будет рассчитывать на то, что если хэш-код объектов разный то и объекты тоже разные. А значит equals() и hashcode() больше не согласованы и совместно не работают.
@user-pg9jm5wf5w
@user-pg9jm5wf5w 3 года назад
@@arhitutorials Спасибо! Теперь точно понял)
@kensaitakeso
@kensaitakeso 2 года назад
Сергей, у меня такой вопрос, а почему в качестве кода hashCode не использовать например UUID? разве это не поможет избежать коллизий? или тут вопрос скорее в том на основе чего генерируется хэш?
@arhitutorials
@arhitutorials 2 года назад
Два объекта с одинаковыми данными должны иметь одинаковые хэши. Это одно из свойств хэш функции. По этому просто так раздать всем UUID нельзя, надо генерировать на основе данных объекта.
@kensaitakeso
@kensaitakeso 2 года назад
@@arhitutorialsда, я понял. хеш генерится на основе данных. но тогда логичным думаю было бы использование md5, sha255 or crc32. или это просто долго?
@simplechannel7859
@simplechannel7859 4 года назад
♥👍📹
@altayski3704
@altayski3704 2 года назад
Приветствую! Сергей, если будет возможность показать перевод из двоичной системы в шестнадцатеричную минуя заход в десятичную.
@arhitutorials
@arhitutorials 2 года назад
Привет. Есть идея сделать разбор алгоритма, который переводит числа из любой системы в любую. Как-нибудь сделаю.
@altayski3704
@altayski3704 2 года назад
@@arhitutorials О-О-о, интересно бы было. Я с JavRush иду по курсу, сюда пришел когда искал поиск второго минимального элемента в массиве. Сделал задачу перевода из двоичного в шестнадцатеричного через десятичное, вывод результата как надо, но некоторые пункты не проходили. Подписан, так что увижу если что.
@nikolas2814
@nikolas2814 5 лет назад
Сделайте, пожалуйста, плейлисты
@arhitutorials
@arhitutorials 5 лет назад
Ок, сделаю в ближайшее время
@nikolas2814
@nikolas2814 5 лет назад
@@arhitutorials спасибо))
@telephon3208
@telephon3208 Год назад
слышала, что hashcode вычисляется лениво. поэтому перемещение объекта на другой адрес в памяти не меняет хэш
@arhitutorials
@arhitutorials Год назад
Вроде как да, один раз берется текущий адрес при первом запоосе, а потом все время выдаётся, даже если объект уехал в другое место.
@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 спасибо
@Duskmage1991
@Duskmage1991 4 года назад
Привет землякам))Можно ли позадавать иногда вопросы по джаве и по андроиду в личку ?)
@arhitutorials
@arhitutorials 4 года назад
Привет, можно. На главной странице есть ссылка на фейсбук, можно туда писать. Я вообще думаю, не создать ли нам сообщество или канал в телеграмме, чтоб было удобнее обсуждать вопросы, делиться новостями и т.д. Как вам идея?)
@Duskmage1991
@Duskmage1991 4 года назад
@@arhitutorials идея хорошая)думаю телеграмм канал было бы неплохо , ну и дискорд тоже можно)
@Duskmage1991
@Duskmage1991 4 года назад
@@arhitutorials вы уже создали телеграмм канал или дискорд ?можно ссылку пожалуйста)
@arhitutorials
@arhitutorials 4 года назад
@@Duskmage1991 Создал группу в Telegram: t.me/ArhiTutorials Добавил ссылку в шапку канала. Теперь будет у нас место для неформального общения, вопросов, взаимопомощи, новостей и прочего. Буду продвигать группу по мере возможности.
@Dmitri915
@Dmitri915 Год назад
как он сделал с 11:06 чтоб выделить и стереть сразу несколько частей и на место их добавит новый текст?
@Dmitri915
@Dmitri915 Год назад
неделя прошла, пока тишина((
@1SkyMan11
@1SkyMan11 Год назад
вероятно alt +j для выбора alt +shift+j для отмены
@1SkyMan11
@1SkyMan11 Год назад
@@Dmitri915 ctrl +ctrl +up or down и каретка клонируется
@alessandrostepanov2145
@alessandrostepanov2145 3 года назад
Кажется начинает проясняться. Что еще важно знать на собеседовании?
@vitaliilapov3498
@vitaliilapov3498 3 года назад
Чому ти оголошував клас Contact статичним? в чому різниця з НЕ статичним класом?
@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) читается как телефоны содержат Ивана, какая связь вообще непонятно
@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, тогда уже проверяем отдельные поля.
@gordanov
@gordanov 3 года назад
11:08 можно shortcut
@arhitutorials
@arhitutorials 3 года назад
Alt + Shift + клик на нужное место в коде. Делал отдельное видео по этой фиче: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-9g6SP0JDzU4.html
@anjelomanoranjan3908
@anjelomanoranjan3908 8 месяцев назад
Спасибо, Серега. Слава Украине!
@svetlanavydrina414
@svetlanavydrina414 2 года назад
"Икьюалс" 🤦‍♀️🤦‍♀️
@arhitutorials
@arhitutorials 2 года назад
А Вы бы как сказали? Икуалс, иквалс?))
@svetlanavydrina414
@svetlanavydrina414 2 года назад
@@arhitutorials транскрипция ['iːkwəlz], то есть да, "иквалз" норм было бы
@EdwardNorthwind
@EdwardNorthwind Год назад
Я вот только одного понять не могу, какого хрена в Set нет метода get()?!?! Ну положил я в Set данные, и что мне дальше с ним делать? Любоваться? Как вообще можно было так ступить и не дать возможности забирать элементы из коллекции. А нововведенный Record? Молодцы, сделали Immuteble класс, но кто вас просил закрывать его от рефлексии? Что мешало добавить final и только тогда делать Record immuteble? А вот без неё - это простой POJO класс. И вместо повсеместного использования - их удел DTO, а народ продолжает использовать Lombok. А как бы шикарно record`ы смотрелись бы... да везде. Просирать полимеры это прям талант.
@mykola.artemov
@mykola.artemov 11 месяцев назад
что за корзины?
@arhitutorials
@arhitutorials 11 месяцев назад
Это речь про устройство хэш-таблицы. В ней элементы раскладываются по нескольким контейнерам в зависимости от значение хэш-кода.
@user-lp8lt6ju4j
@user-lp8lt6ju4j 2 года назад
Да черт с иквелсом, ты лучше скажи как ты сразу несколько строк отформатировал)))
@kergshi9847
@kergshi9847 6 месяцев назад
пи*дец,вообще ничего не понял,откуда что берется(
@user-nv3fv3vv9l
@user-nv3fv3vv9l Год назад
я один абсолютно не розумію логіки 2 останніх строчок коду в оверайді іквелс? Типу якщо ім'я не нал то ім'я не дорівнює самому собі, а якщо ім'я налл то воно не нал? Шо за херня , з хешкодом все ясно
@RumEvo
@RumEvo Год назад
if(если результат любого метода вернет true) то выполнится код после, а после прописано return false то есть, если внутри if мы по equals получили true, то возвращать false будет не правильно, поэтому приводим true к false таким образом (!true = false) сам долго голову бил...
Далее
Java. Работа с датой и временем.
18:21
Разница подходов
00:59
Просмотров 63 тыс.
Type Erasure
2:47
Просмотров 3,4 тыс.
Java. Очередь и стек.
22:03
Просмотров 21 тыс.