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

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

Комментарии • 109

  • @ВладимирМокров-ю7ц
    @ВладимирМокров-ю7ц 5 лет назад +41

    Коротко, лаконично, по делу!!! Спасибо тебе добрый человек

    • @arhitutorials
      @arhitutorials  5 лет назад +3

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

    • @tweak7708
      @tweak7708 2 года назад +1

      @@arhitutorials подскажите пожалуйста , как IDEA автоматически переопределяет методы как у Вас.
      У меня при переопределении выходит все по стандарту.
      @Override
      public String toString() {
      return super.toString()}
      @Override
      public int hashCode() {
      return super.hashCode() }
      Понимаю может вопрос тупой , поэтому заранее извиняюсь...
      А так в целом все последовательно и понятно , спасибо.

    • @RumEvo
      @RumEvo Год назад

      @@tweak7708 если я не ошибаюсь, вариант в видео был сделан ручную

    • @YoungRembo
      @YoungRembo 7 месяцев назад

      @@tweak7708 если ты работаешь в Intellij IDEA то нажми Alt + Insert и выбери соответствующий пункт

  • @danchenski9434
    @danchenski9434 Год назад +3

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

  • @musiclife2641
    @musiclife2641 2 года назад +4

    Спасибо за Ваши старания, один из ЛУЧШИХ каналов про программирование для новичков)

  • @berkana8731
    @berkana8731 4 года назад +7

    Благодарю за грамотную подачу материала, пояснение ньюансов и доступность исходников☺ ☺ ☺ Очень помагает наличие теоретической составляющей, а не просто кода!

  • @МихаилБезуглов-ь4ы
    @МихаилБезуглов-ь4ы 5 месяцев назад

    Спасибо! Всегда с большим удовольствием смотрю ваши видео!

  • @ivans7690
    @ivans7690 3 года назад +4

    Тот случай, когда видео нужно СМОТРЕТЬ ДО КОНЦА! Самое вкусное (и полезное) в концовке!

  • @Ren-z5m3t
    @Ren-z5m3t Год назад +1

    Просто Гуру! Спокойный, наглядный и понятный стиль изложения материала. Нечасто такое можно встретить

  • @whatyoumean1498
    @whatyoumean1498 6 месяцев назад

    Не жалко потратить время и настрочить комментарий)
    Спасибо, очень полезное и приятное видео.

  • @Krasnolesye
    @Krasnolesye 3 года назад

    Видео, которое закрывает все пробелы в этой области. С удовольствием посмотрел.
    Молодца!

  • @Lok1goD
    @Lok1goD 3 года назад +2

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

  • @severustvr8202
    @severustvr8202 Год назад

    15 минут и все понятно. Спасибо за труд!

  • @МаксМакс-ч8к
    @МаксМакс-ч8к 2 года назад +4

    Всем доброго дня! Обращаюсь к автору:
    я пересмотрел множество различных видео уроков, Ваши как минимум одни из лучших!!!
    Если у Вас будет время и желание, сделайте уроки по Java для начинающих. Уверен, что многие оценят!!!

  • @smthsmth111
    @smthsmth111 3 года назад +2

    Спасибо за видео. Очень доходчиво объясняется принципы работы этих методов, всё понятно 👍

  • @nicholaswhite7351
    @nicholaswhite7351 7 месяцев назад

    Очень хорошая подача материала. Огромное спасибо. Всех баг автору.

  • @sanix183
    @sanix183 Год назад

    Сергей, ты большой молодец! Спасибо!

  • @alex_danich
    @alex_danich 3 года назад +2

    Красавчик! Коротко и ясно, как и надо.

  • @ermilovnik
    @ermilovnik 3 года назад +2

    Спасибо за твои видео, все понятно без лишней воды

  • @igortarasov4482
    @igortarasov4482 2 года назад

    Счастья, здоровья, жену послушную

  • @antonignatenko7776
    @antonignatenko7776 2 года назад

    дай бог тебе здоровья, спасибо за такое отличное объяснение

  • @радиостанция
    @радиостанция 5 лет назад +9

    Спасибо, очень помог. Лайк, подписка.

  • @ДмитрийСамсонов-я2о

    Восхитительное объяснение!

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Год назад

    Отличные уроки. Спасибо

  • @alexpushkarev8003
    @alexpushkarev8003 Год назад

    благодарю, очень доходчиво объяснил

  • @divergenny
    @divergenny 3 года назад

    Благодарю за ваши труды

  • @Antares19871
    @Antares19871 4 года назад +1

    Спасибо за видео. Очень понятно рассказали.

  • @maksimsimakou3848
    @maksimsimakou3848 3 года назад +1

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

  • @ИмяДрезден
    @ИмяДрезден 2 года назад

    Классное видео. Очень понятно и интересно. Спасибо большое !

  • @djadjaandrey
    @djadjaandrey 8 месяцев назад

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

  • @evgenyivanov744
    @evgenyivanov744 3 года назад +1

    спасибо сергей!

  • @dmitrysmirnov9449
    @dmitrysmirnov9449 4 года назад +1

    Сергей, добавь возможность донатить ) Очень ценные видео, спасибо большое!

  • @BessRS
    @BessRS 3 года назад

    Открыл глаза,спасибо

  • @_Yar_
    @_Yar_ 3 года назад

    Супер! Спасибо!

  • @anastasiabruks9700
    @anastasiabruks9700 2 года назад +3

    как вы так хитро выделили все нужные для изменения поля result и поменяли их на hash? какие клавиши зажимать?)

  • @catalina8984
    @catalina8984 4 года назад +1

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

  • @ЮрийЮрьев-х2т
    @ЮрийЮрьев-х2т 4 года назад +1

    Спасибо! Толково.

  • @filsdepers
    @filsdepers Год назад

    Спасибо❤

  • @maxbasov5485
    @maxbasov5485 2 года назад +1

    Только начал учить Java и сразу влюбился в этот язык за его строгость и предсказумость, а тут это!!)))) НУ ЗАЧЕМ?))
    Есть все таки что-то от сатаны в этих языках с приставкой Java ))

    • @arhitutorials
      @arhitutorials  2 года назад +1

      А по моему, все логично)
      Это вы еще видео про ковариантность/контравариантность не смотрели 😅

  • @SergiVRN
    @SergiVRN Год назад +1

    А какие пункты Вы выбирали при автогенерации? или вы руками добавили 31?

  • @xaxelpx
    @xaxelpx Год назад

    У меня IDEA совсем в другом виде переопределила equals и hashCode. В методе hashCode вообще нет реализации, как на этом видео, только 'return Objects.hash(a, b)'.

  • @Yogamassagekzn
    @Yogamassagekzn 2 года назад

    А про instanceof было уже где то?
    Почему this без точки и переменной?

  • @NikolaiStiazhkin
    @NikolaiStiazhkin Год назад

    Только так можно достичь Дзена )))

  • @XIRON86
    @XIRON86 3 года назад

    Интересный канал. Подписался. Хотел бы узнать, что необходимо знать, чтобы найти работу на вакансию java junior'a.

  • @johannesbrown8853
    @johannesbrown8853 5 лет назад +3

    Очень доступно объясняешь. Спасибо! Продолжай в том же духе))) возможно лично или в соц сетях задавать вопросы о непонятных вещах в Java?

    • @arhitutorials
      @arhitutorials  5 лет назад +1

      Спасибо! Стараюсь)
      Конечно возможно. Только отвечаю иногда долго, потому что работа.
      Так же, если будет интересен Android, могу помочь с обучением: ответы на вопросы, задачи, code review, и все в таком духе.

    • @johannesbrown8853
      @johannesbrown8853 5 лет назад

      Sergey Arkhipov Спасибо большое! Android планирую немного попозже. Сейчас конкретно практикую Java Core. Так как цель устроиться на Junior. Возможно по Java делать code review?)

    • @arhitutorials
      @arhitutorials  5 лет назад +1

      @@johannesbrown8853 упаковывай проект в zip и присылай на почту arhiser@gmail.com. Посмотрю и напишу отзыв.

    • @johannesbrown8853
      @johannesbrown8853 5 лет назад

      Sergey Arkhipov спасибо!

  • @Айлана-ж8л
    @Айлана-ж8л 3 года назад

    спасибо)

  • @МихаилГордеев-я3б
    @МихаилГордеев-я3б 4 года назад +2

    Здравствуйте, спасибо за контент, все доступно объясняете! Только у меня вопрос обязательно ли что б equals и hashcode использовали одинаковые поля? т.е. можно ли высчитывать хэшкод по одному полю а сравнивать в equals по трем полям?

    • @arhitutorials
      @arhitutorials  4 года назад +5

      Все можно, только надо отдавать себе отчет, зачем это делать. А то так можно дойти до ситуации, когда объекты, равные по equals, будут иметь разный хеш-код. Тогда уже нельзя будет рассчитывать на то, что если хэш-код объектов разный то и объекты тоже разные. А значит equals() и hashcode() больше не согласованы и совместно не работают.

    • @МихаилГордеев-я3б
      @МихаилГордеев-я3б 4 года назад

      @@arhitutorials Спасибо! Теперь точно понял)

  • @МарпехДалласский
    @МарпехДалласский 18 дней назад

    а почему в реализации equals для иммутабельного объекта достаточно сравнения по хэшу? хэш же может совпадать у разных объектов

    • @arhitutorials
      @arhitutorials  18 дней назад

      Для equals недостаточно. В случае, если хэши двух объектов одинаковые, надо разбираться, что у них внутри.

  • @telephon3208
    @telephon3208 Год назад

    слышала, что hashcode вычисляется лениво. поэтому перемещение объекта на другой адрес в памяти не меняет хэш

    • @arhitutorials
      @arhitutorials  Год назад

      Вроде как да, один раз берется текущий адрес при первом запоосе, а потом все время выдаётся, даже если объект уехал в другое место.

  • @alexandrkomar4741
    @alexandrkomar4741 Год назад

    Здравствуйте. получается что hashCode and equals вы переопределили сразу в видео на 4:13 минуте? и как на 11:05 вы выделили все слова и заменили их все одновременно?

  • @nikolas2814
    @nikolas2814 5 лет назад +1

    Сделайте, пожалуйста, плейлисты

    • @arhitutorials
      @arhitutorials  5 лет назад +1

      Ок, сделаю в ближайшее время

    • @nikolas2814
      @nikolas2814 5 лет назад

      @@arhitutorials спасибо))

  • @altayski04
    @altayski04 2 года назад

    Приветствую! Сергей, если будет возможность показать перевод из двоичной системы в шестнадцатеричную минуя заход в десятичную.

    • @arhitutorials
      @arhitutorials  2 года назад

      Привет. Есть идея сделать разбор алгоритма, который переводит числа из любой системы в любую. Как-нибудь сделаю.

    • @altayski04
      @altayski04 2 года назад

      @@arhitutorials О-О-о, интересно бы было. Я с JavRush иду по курсу, сюда пришел когда искал поиск второго минимального элемента в массиве. Сделал задачу перевода из двоичного в шестнадцатеричного через десятичное, вывод результата как надо, но некоторые пункты не проходили. Подписан, так что увижу если что.

  • @Dmitri915
    @Dmitri915 2 года назад +1

    как он сделал с 11:06 чтоб выделить и стереть сразу несколько частей и на место их добавит новый текст?

    • @Dmitri915
      @Dmitri915 2 года назад

      неделя прошла, пока тишина((

    • @1SkyMan11
      @1SkyMan11 2 года назад

      вероятно alt +j для выбора alt +shift+j для отмены

    • @1SkyMan11
      @1SkyMan11 2 года назад

      @@Dmitri915 ctrl +ctrl +up or down и каретка клонируется

  • @kensaitakeso
    @kensaitakeso 2 года назад

    Сергей, у меня такой вопрос, а почему в качестве кода hashCode не использовать например UUID? разве это не поможет избежать коллизий? или тут вопрос скорее в том на основе чего генерируется хэш?

    • @arhitutorials
      @arhitutorials  2 года назад +1

      Два объекта с одинаковыми данными должны иметь одинаковые хэши. Это одно из свойств хэш функции. По этому просто так раздать всем UUID нельзя, надо генерировать на основе данных объекта.

    • @kensaitakeso
      @kensaitakeso 2 года назад

      @@arhitutorialsда, я понял. хеш генерится на основе данных. но тогда логичным думаю было бы использование md5, sha255 or crc32. или это просто долго?

  • @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 спасибо

  • @simplechannel7859
    @simplechannel7859 4 года назад

    ♥👍📹

  • @alessandrostepanov2145
    @alessandrostepanov2145 3 года назад

    Кажется начинает проясняться. Что еще важно знать на собеседовании?

  • @Duskmage1991
    @Duskmage1991 5 лет назад

    Привет землякам))Можно ли позадавать иногда вопросы по джаве и по андроиду в личку ?)

    • @arhitutorials
      @arhitutorials  5 лет назад +3

      Привет, можно. На главной странице есть ссылка на фейсбук, можно туда писать. Я вообще думаю, не создать ли нам сообщество или канал в телеграмме, чтоб было удобнее обсуждать вопросы, делиться новостями и т.д. Как вам идея?)

    • @Duskmage1991
      @Duskmage1991 5 лет назад

      @@arhitutorials идея хорошая)думаю телеграмм канал было бы неплохо , ну и дискорд тоже можно)

    • @Duskmage1991
      @Duskmage1991 5 лет назад

      @@arhitutorials вы уже создали телеграмм канал или дискорд ?можно ссылку пожалуйста)

    • @arhitutorials
      @arhitutorials  5 лет назад

      @@Duskmage1991 Создал группу в Telegram:
      t.me/ArhiTutorials
      Добавил ссылку в шапку канала. Теперь будет у нас место для неформального общения, вопросов, взаимопомощи, новостей и прочего. Буду продвигать группу по мере возможности.

  • @vitaliilapov3498
    @vitaliilapov3498 4 года назад

    Чому ти оголошував клас Contact статичним? в чому різниця з НЕ статичним класом?

  • @anjelomanoranjan
    @anjelomanoranjan Год назад

    Спасибо, Серега. Слава Украине!

  • @КаримовЛазиз-з3з
    @КаримовЛазиз-з3з 3 года назад

    объясните строчку Contact contact = (Contact) o;

    • @arhitutorials
      @arhitutorials  3 года назад +3

      Это приведение типа переменной o к типу Contact.
      Функция equals имеет следующую сигнатуру:
      public boolean equals(Object o);
      - то есть, может принимать в качестве параметра объект любого типа. По этому внутри нужна проверка и приведение:
      if (!(o instanceof Contact)) return false;
      Contact contact = (Contact) o;
      А дальше, если нам передали объект типа 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) читается как телефоны содержат Ивана, какая связь вообще непонятно

  • @EdwardNorthwind
    @EdwardNorthwind Год назад

    Я вот только одного понять не могу, какого хрена в Set нет метода get()?!?! Ну положил я в Set данные, и что мне дальше с ним делать? Любоваться? Как вообще можно было так ступить и не дать возможности забирать элементы из коллекции.
    А нововведенный Record? Молодцы, сделали Immuteble класс, но кто вас просил закрывать его от рефлексии? Что мешало добавить final и только тогда делать Record immuteble? А вот без неё - это простой POJO класс. И вместо повсеместного использования - их удел DTO, а народ продолжает использовать Lombok. А как бы шикарно record`ы смотрелись бы... да везде.
    Просирать полимеры это прям талант.

  • @gordanov
    @gordanov 3 года назад

    11:08 можно shortcut

    • @arhitutorials
      @arhitutorials  3 года назад

      Alt + Shift + клик на нужное место в коде. Делал отдельное видео по этой фиче:
      ruclips.net/video/9g6SP0JDzU4/видео.html

  • @Дмитрий-ъ2к8у
    @Дмитрий-ъ2к8у 2 года назад +1

    Да черт с иквелсом, ты лучше скажи как ты сразу несколько строк отформатировал)))

  • @mykola.artemov
    @mykola.artemov Год назад

    что за корзины?

    • @arhitutorials
      @arhitutorials  Год назад

      Это речь про устройство хэш-таблицы. В ней элементы раскладываются по нескольким контейнерам в зависимости от значение хэш-кода.

  • @kergshi9847
    @kergshi9847 Год назад

    пи*дец,вообще ничего не понял,откуда что берется(

  • @СинявськийБогдан

    я один абсолютно не розумію логіки 2 останніх строчок коду в оверайді іквелс? Типу якщо ім'я не нал то ім'я не дорівнює самому собі, а якщо ім'я налл то воно не нал? Шо за херня , з хешкодом все ясно

    • @RumEvo
      @RumEvo Год назад

      if(если результат любого метода вернет true) то выполнится код после, а после прописано return false
      то есть, если внутри if мы по equals получили true, то возвращать false будет не правильно, поэтому приводим true к false таким образом (!true = false)
      сам долго голову бил...

  • @svetlanavydrina414
    @svetlanavydrina414 3 года назад +3

    "Икьюалс" 🤦‍♀️🤦‍♀️

    • @arhitutorials
      @arhitutorials  3 года назад +1

      А Вы бы как сказали? Икуалс, иквалс?))

    • @svetlanavydrina414
      @svetlanavydrina414 3 года назад +2

      @@arhitutorials транскрипция ['iːkwəlz], то есть да, "иквалз" норм было бы

  • @schrotKz
    @schrotKz Год назад

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