@@arhitutorials подскажите пожалуйста , как IDEA автоматически переопределяет методы как у Вас. У меня при переопределении выходит все по стандарту. @Override public String toString() { return super.toString()} @Override public int hashCode() { return super.hashCode() } Понимаю может вопрос тупой , поэтому заранее извиняюсь... А так в целом все последовательно и понятно , спасибо.
Благодарю за грамотную подачу материала, пояснение ньюансов и доступность исходников☺ ☺ ☺ Очень помагает наличие теоретической составляющей, а не просто кода!
Всем доброго дня! Обращаюсь к автору: я пересмотрел множество различных видео уроков, Ваши как минимум одни из лучших!!! Если у Вас будет время и желание, сделайте уроки по Java для начинающих. Уверен, что многие оценят!!!
Только начал учить Java и сразу влюбился в этот язык за его строгость и предсказумость, а тут это!!)))) НУ ЗАЧЕМ?)) Есть все таки что-то от сатаны в этих языках с приставкой Java ))
Спасибо! Стараюсь) Конечно возможно. Только отвечаю иногда долго, потому что работа. Так же, если будет интересен Android, могу помочь с обучением: ответы на вопросы, задачи, code review, и все в таком духе.
Sergey Arkhipov Спасибо большое! Android планирую немного попозже. Сейчас конкретно практикую Java Core. Так как цель устроиться на Junior. Возможно по Java делать code review?)
У меня IDEA совсем в другом виде переопределила equals и hashCode. В методе hashCode вообще нет реализации, как на этом видео, только 'return Objects.hash(a, b)'.
Здравствуйте, спасибо за контент, все доступно объясняете! Только у меня вопрос обязательно ли что б equals и hashcode использовали одинаковые поля? т.е. можно ли высчитывать хэшкод по одному полю а сравнивать в equals по трем полям?
Все можно, только надо отдавать себе отчет, зачем это делать. А то так можно дойти до ситуации, когда объекты, равные по equals, будут иметь разный хеш-код. Тогда уже нельзя будет рассчитывать на то, что если хэш-код объектов разный то и объекты тоже разные. А значит equals() и hashcode() больше не согласованы и совместно не работают.
Здравствуйте. получается что hashCode and equals вы переопределили сразу в видео на 4:13 минуте? и как на 11:05 вы выделили все слова и заменили их все одновременно?
@@arhitutorials О-О-о, интересно бы было. Я с JavRush иду по курсу, сюда пришел когда искал поиск второго минимального элемента в массиве. Сделал задачу перевода из двоичного в шестнадцатеричного через десятичное, вывод результата как надо, но некоторые пункты не проходили. Подписан, так что увижу если что.
Сергей, у меня такой вопрос, а почему в качестве кода hashCode не использовать например UUID? разве это не поможет избежать коллизий? или тут вопрос скорее в том на основе чего генерируется хэш?
Два объекта с одинаковыми данными должны иметь одинаковые хэши. Это одно из свойств хэш функции. По этому просто так раздать всем UUID нельзя, надо генерировать на основе данных объекта.
Здравствуйте. Можете поподробнее объяснить на 4:27 " Contact contact = (Contact ) o " ! Вы об этом ничего не сказали. Так как от этой строки (которую я недопонял) идёт дальше построение кода на сравнение итд
В сигнатуре метода equals параметр имеет тип Object, что даёт возможность сравнивать на equals объекты разных типов. В подавляющем большинстве случаев это не нужно, по этому в методе сразу проверяется, что аргумент имеет тот же тип. Если да, то аргумент приводится к соответствующему типу, contact = (Contact) o; И дальше уже идёт логика сравнения полей объектов.
Привет, можно. На главной странице есть ссылка на фейсбук, можно туда писать. Я вообще думаю, не создать ли нам сообщество или канал в телеграмме, чтоб было удобнее обсуждать вопросы, делиться новостями и т.д. Как вам идея?)
@@Duskmage1991 Создал группу в Telegram: t.me/ArhiTutorials Добавил ссылку в шапку канала. Теперь будет у нас место для неформального общения, вопросов, взаимопомощи, новостей и прочего. Буду продвигать группу по мере возможности.
Спасибо. Позволю себе небольшой совет для шлифовки - можно чуть улучшить читабельность если поменять имена. Например вместо: *contacts.contains(contact2)* сделать: *phones.contains(Ivan)*
@@Das.Kleine.Krokodil это да, только читабельность кода и читабельность текста это не одно и то же. Ваш пример это каша. Сущность contact содержит набор данных: имя, телефон, адрес и т.д. соответственно contacts это коллекция сущностей contact, поэтому contacts.contains(contact) читается понятно и логично. А phones.contacts(Ivan) читается как телефоны содержат Ивана, какая связь вообще непонятно
Это приведение типа переменной o к типу Contact. Функция equals имеет следующую сигнатуру: public boolean equals(Object o); - то есть, может принимать в качестве параметра объект любого типа. По этому внутри нужна проверка и приведение: if (!(o instanceof Contact)) return false; Contact contact = (Contact) o; А дальше, если нам передали объект типа Contact, тогда уже проверяем отдельные поля.
Я вот только одного понять не могу, какого хрена в Set нет метода get()?!?! Ну положил я в Set данные, и что мне дальше с ним делать? Любоваться? Как вообще можно было так ступить и не дать возможности забирать элементы из коллекции. А нововведенный Record? Молодцы, сделали Immuteble класс, но кто вас просил закрывать его от рефлексии? Что мешало добавить final и только тогда делать Record immuteble? А вот без неё - это простой POJO класс. И вместо повсеместного использования - их удел DTO, а народ продолжает использовать Lombok. А как бы шикарно record`ы смотрелись бы... да везде. Просирать полимеры это прям талант.
я один абсолютно не розумію логіки 2 останніх строчок коду в оверайді іквелс? Типу якщо ім'я не нал то ім'я не дорівнює самому собі, а якщо ім'я налл то воно не нал? Шо за херня , з хешкодом все ясно
if(если результат любого метода вернет true) то выполнится код после, а после прописано return false то есть, если внутри if мы по equals получили true, то возвращать false будет не правильно, поэтому приводим true к false таким образом (!true = false) сам долго голову бил...
Коротко, лаконично, по делу!!! Спасибо тебе добрый человек
Спасибо за поддержку!
@@arhitutorials подскажите пожалуйста , как IDEA автоматически переопределяет методы как у Вас.
У меня при переопределении выходит все по стандарту.
@Override
public String toString() {
return super.toString()}
@Override
public int hashCode() {
return super.hashCode() }
Понимаю может вопрос тупой , поэтому заранее извиняюсь...
А так в целом все последовательно и понятно , спасибо.
@@tweak7708 если я не ошибаюсь, вариант в видео был сделан ручную
@@tweak7708 если ты работаешь в Intellij IDEA то нажми Alt + Insert и выбери соответствующий пункт
Мужик, просто громадное спасибо, который раз меня уже выручаешь!!!
Тот случай, когда видео нужно СМОТРЕТЬ ДО КОНЦА! Самое вкусное (и полезное) в концовке!
Спасибо за Ваши старания, один из ЛУЧШИХ каналов про программирование для новичков)
Спасибо! Всегда с большим удовольствием смотрю ваши видео!
Благодарю за грамотную подачу материала, пояснение ньюансов и доступность исходников☺ ☺ ☺ Очень помагает наличие теоретической составляющей, а не просто кода!
Просто Гуру! Спокойный, наглядный и понятный стиль изложения материала. Нечасто такое можно встретить
Огонь! Отличные примеры, лучшее что я нашел на просторах ютуба! Спасибо молодой человек! От меня лойс и подписка!
Не жалко потратить время и настрочить комментарий)
Спасибо, очень полезное и приятное видео.
Красавчик! Коротко и ясно, как и надо.
Спасибо за твои видео, все понятно без лишней воды
Видео, которое закрывает все пробелы в этой области. С удовольствием посмотрел.
Молодца!
15 минут и все понятно. Спасибо за труд!
Спасибо за видео. Очень доходчиво объясняется принципы работы этих методов, всё понятно 👍
Очень хорошая подача материала. Огромное спасибо. Всех баг автору.
Сергей, ты большой молодец! Спасибо!
Всем доброго дня! Обращаюсь к автору:
я пересмотрел множество различных видео уроков, Ваши как минимум одни из лучших!!!
Если у Вас будет время и желание, сделайте уроки по Java для начинающих. Уверен, что многие оценят!!!
Спасибо, очень помог. Лайк, подписка.
Счастья, здоровья, жену послушную
дай бог тебе здоровья, спасибо за такое отличное объяснение
Восхитительное объяснение!
Отличное объяснение! Спасибо
Отличные уроки. Спасибо
Спасибо за видео. Очень понятно рассказали.
благодарю, очень доходчиво объяснил
спасибо сергей!
Спасибо за видео!
Благодарю за ваши труды
Сергей, добавь возможность донатить ) Очень ценные видео, спасибо большое!
Классное видео. Очень понятно и интересно. Спасибо большое !
как вы так хитро выделили все нужные для изменения поля result и поменяли их на hash? какие клавиши зажимать?)
Открыл глаза,спасибо
Спасибо! Толково.
Хорошее объяснение, спасибо
Спасибо❤
Супер! Спасибо!
Только начал учить Java и сразу влюбился в этот язык за его строгость и предсказумость, а тут это!!)))) НУ ЗАЧЕМ?))
Есть все таки что-то от сатаны в этих языках с приставкой Java ))
А по моему, все логично)
Это вы еще видео про ковариантность/контравариантность не смотрели 😅
Только так можно достичь Дзена )))
Очень доступно объясняешь. Спасибо! Продолжай в том же духе))) возможно лично или в соц сетях задавать вопросы о непонятных вещах в Java?
Спасибо! Стараюсь)
Конечно возможно. Только отвечаю иногда долго, потому что работа.
Так же, если будет интересен Android, могу помочь с обучением: ответы на вопросы, задачи, code review, и все в таком духе.
Sergey Arkhipov Спасибо большое! Android планирую немного попозже. Сейчас конкретно практикую Java Core. Так как цель устроиться на Junior. Возможно по Java делать code review?)
@@johannesbrown8853 упаковывай проект в zip и присылай на почту arhiser@gmail.com. Посмотрю и напишу отзыв.
Sergey Arkhipov спасибо!
У меня IDEA совсем в другом виде переопределила equals и hashCode. В методе hashCode вообще нет реализации, как на этом видео, только 'return Objects.hash(a, b)'.
А какие пункты Вы выбирали при автогенерации? или вы руками добавили 31?
А про instanceof было уже где то?
Почему this без точки и переменной?
Здравствуйте, спасибо за контент, все доступно объясняете! Только у меня вопрос обязательно ли что б equals и hashcode использовали одинаковые поля? т.е. можно ли высчитывать хэшкод по одному полю а сравнивать в equals по трем полям?
Все можно, только надо отдавать себе отчет, зачем это делать. А то так можно дойти до ситуации, когда объекты, равные по equals, будут иметь разный хеш-код. Тогда уже нельзя будет рассчитывать на то, что если хэш-код объектов разный то и объекты тоже разные. А значит equals() и hashcode() больше не согласованы и совместно не работают.
@@arhitutorials Спасибо! Теперь точно понял)
Интересный канал. Подписался. Хотел бы узнать, что необходимо знать, чтобы найти работу на вакансию java junior'a.
спасибо)
слышала, что hashcode вычисляется лениво. поэтому перемещение объекта на другой адрес в памяти не меняет хэш
Вроде как да, один раз берется текущий адрес при первом запоосе, а потом все время выдаётся, даже если объект уехал в другое место.
Здравствуйте. получается что hashCode and equals вы переопределили сразу в видео на 4:13 минуте? и как на 11:05 вы выделили все слова и заменили их все одновременно?
Приветствую! Сергей, если будет возможность показать перевод из двоичной системы в шестнадцатеричную минуя заход в десятичную.
Привет. Есть идея сделать разбор алгоритма, который переводит числа из любой системы в любую. Как-нибудь сделаю.
@@arhitutorials О-О-о, интересно бы было. Я с JavRush иду по курсу, сюда пришел когда искал поиск второго минимального элемента в массиве. Сделал задачу перевода из двоичного в шестнадцатеричного через десятичное, вывод результата как надо, но некоторые пункты не проходили. Подписан, так что увижу если что.
Сделайте, пожалуйста, плейлисты
Ок, сделаю в ближайшее время
@@arhitutorials спасибо))
Сергей, у меня такой вопрос, а почему в качестве кода hashCode не использовать например UUID? разве это не поможет избежать коллизий? или тут вопрос скорее в том на основе чего генерируется хэш?
Два объекта с одинаковыми данными должны иметь одинаковые хэши. Это одно из свойств хэш функции. По этому просто так раздать всем UUID нельзя, надо генерировать на основе данных объекта.
@@arhitutorialsда, я понял. хеш генерится на основе данных. но тогда логичным думаю было бы использование md5, sha255 or crc32. или это просто долго?
Здравствуйте. Можете поподробнее объяснить на 4:27 " Contact contact = (Contact ) o " ! Вы об этом ничего не сказали. Так как от этой строки (которую я недопонял) идёт дальше построение кода на сравнение итд
В сигнатуре метода equals параметр имеет тип Object, что даёт возможность сравнивать на equals объекты разных типов. В подавляющем большинстве случаев это не нужно, по этому в методе сразу проверяется, что аргумент имеет тот же тип. Если да, то аргумент приводится к соответствующему типу, contact = (Contact) o;
И дальше уже идёт логика сравнения полей объектов.
@@arhitutorials спасибо
как он сделал с 11:06 чтоб выделить и стереть сразу несколько частей и на место их добавит новый текст?
неделя прошла, пока тишина((
вероятно alt +j для выбора alt +shift+j для отмены
@@Dmitri915 ctrl +ctrl +up or down и каретка клонируется
Кажется начинает проясняться. Что еще важно знать на собеседовании?
♥👍📹
Привет землякам))Можно ли позадавать иногда вопросы по джаве и по андроиду в личку ?)
Привет, можно. На главной странице есть ссылка на фейсбук, можно туда писать. Я вообще думаю, не создать ли нам сообщество или канал в телеграмме, чтоб было удобнее обсуждать вопросы, делиться новостями и т.д. Как вам идея?)
@@arhitutorials идея хорошая)думаю телеграмм канал было бы неплохо , ну и дискорд тоже можно)
@@arhitutorials вы уже создали телеграмм канал или дискорд ?можно ссылку пожалуйста)
@@Duskmage1991 Создал группу в Telegram:
t.me/ArhiTutorials
Добавил ссылку в шапку канала. Теперь будет у нас место для неформального общения, вопросов, взаимопомощи, новостей и прочего. Буду продвигать группу по мере возможности.
Спасибо. Позволю себе небольшой совет для шлифовки - можно чуть улучшить читабельность если поменять имена. Например вместо:
*contacts.contains(contact2)*
сделать:
*phones.contains(Ivan)*
Так точно не лучше
@@priest774 точно лучше, потому что имена переменных и методов не похожи друг на друга как братья близнецы
@@Das.Kleine.Krokodil это да, только читабельность кода и читабельность текста это не одно и то же. Ваш пример это каша. Сущность contact содержит набор данных: имя, телефон, адрес и т.д. соответственно contacts это коллекция сущностей contact, поэтому contacts.contains(contact) читается понятно и логично. А phones.contacts(Ivan) читается как телефоны содержат Ивана, какая связь вообще непонятно
объясните строчку Contact contact = (Contact) o;
Это приведение типа переменной o к типу Contact.
Функция equals имеет следующую сигнатуру:
public boolean equals(Object o);
- то есть, может принимать в качестве параметра объект любого типа. По этому внутри нужна проверка и приведение:
if (!(o instanceof Contact)) return false;
Contact contact = (Contact) o;
А дальше, если нам передали объект типа Contact, тогда уже проверяем отдельные поля.
Чому ти оголошував клас Contact статичним? в чому різниця з НЕ статичним класом?
Вложенные класс
Спасибо, Серега. Слава Украине!
11:08 можно shortcut
Alt + Shift + клик на нужное место в коде. Делал отдельное видео по этой фиче:
ruclips.net/video/9g6SP0JDzU4/видео.html
Я вот только одного понять не могу, какого хрена в Set нет метода get()?!?! Ну положил я в Set данные, и что мне дальше с ним делать? Любоваться? Как вообще можно было так ступить и не дать возможности забирать элементы из коллекции.
А нововведенный Record? Молодцы, сделали Immuteble класс, но кто вас просил закрывать его от рефлексии? Что мешало добавить final и только тогда делать Record immuteble? А вот без неё - это простой POJO класс. И вместо повсеместного использования - их удел DTO, а народ продолжает использовать Lombok. А как бы шикарно record`ы смотрелись бы... да везде.
Просирать полимеры это прям талант.
что за корзины?
Это речь про устройство хэш-таблицы. В ней элементы раскладываются по нескольким контейнерам в зависимости от значение хэш-кода.
Да черт с иквелсом, ты лучше скажи как ты сразу несколько строк отформатировал)))
я один абсолютно не розумію логіки 2 останніх строчок коду в оверайді іквелс? Типу якщо ім'я не нал то ім'я не дорівнює самому собі, а якщо ім'я налл то воно не нал? Шо за херня , з хешкодом все ясно
if(если результат любого метода вернет true) то выполнится код после, а после прописано return false
то есть, если внутри if мы по equals получили true, то возвращать false будет не правильно, поэтому приводим true к false таким образом (!true = false)
сам долго голову бил...
пи*дец,вообще ничего не понял,откуда что берется(
"Икьюалс" 🤦♀️🤦♀️
А Вы бы как сказали? Икуалс, иквалс?))
@@arhitutorials транскрипция ['iːkwəlz], то есть да, "иквалз" норм было бы
Хорошее объяснение! Спасибо!