Урок 19. Правила переопределения методов equals и hashCode [Курсы Java с нуля]

แชร์
ฝัง
  • เผยแพร่เมื่อ 16 ม.ค. 2025

ความคิดเห็น • 22

  • @Ignacio-lh9vi
    @Ignacio-lh9vi 10 หลายเดือนก่อน

    Редко оставляю комментарии, но тут хочется поблагодарить автора видео. Его курс очень четко описывает выбранные темы, посмотрел выборочно несколько видео по темам, которые вызывали вопросы и самое понятное объяснение нашел на этом канале. Очень жалко, что мало подписчиков, хотя уровень подготовки и реализации видео на высшем уровне!!!

  • @johnmiller4839
    @johnmiller4839 5 หลายเดือนก่อน

    Чётко и подробно. Все бы так объясняли. Лайк

  • @ovirtv3708
    @ovirtv3708 11 หลายเดือนก่อน

    Благодаря видосу я понял equals и hashCode.
    Хотя до этого много чего читал, и смотрел на ютубе

  • @LAZIO14
    @LAZIO14 ปีที่แล้ว

    спасибо! Идеальное видео

  • @aramzoryan
    @aramzoryan 4 ปีที่แล้ว

    При вводе промежуточной переменной заработало.

  • @aramzoryan
    @aramzoryan 4 ปีที่แล้ว

    Не могу понять, почему не работает строка.
    map.entrySet().removeIf(entry -> entry.getValue().equals(removeDubl(map)));
    Если вместо removeDubl(map) вставляешь конкретную строку(через" "), то работает.

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว

      Я не вижу реализацию метода removeDubl(), не смогу помочь.

  • @aramzoryan
    @aramzoryan 4 ปีที่แล้ว

    Как же сравнить значения элементов в мапе?

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว

      Ты можешь получить ключ или значение из пары при помощи методов getKey() и getValue() и потом уже сравнивать эти значения.

    • @aramzoryan
      @aramzoryan 4 ปีที่แล้ว

      @@artemvorov С помощью встроенного цикла в цикле?

    • @aramzoryan
      @aramzoryan 4 ปีที่แล้ว

      @@artemvorov for (Map.Entry entry : map.entrySet()) {
      if (entry.getValue().equals(с чем тут сравнивать?))
      }
      У "map.entrySet()" не вызовешь ".getValue()".

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว

      @@aramzoryan Да, можешь использовать вложенный цикл

  • @artemvorov
    @artemvorov  4 ปีที่แล้ว +5

    ДЗ:
    /*
    Создать словарь (Map) занести в него 5 записей по принципу «Фамилия» - «Имя».
    Проверить сколько людей имеют совпадающие с заданным имя или фамилию:
    - создать метод getCountTheSameFirstName(Map map, String name), который должен вернуть количество
    пар с именем, которое приходит в аргумент name
    - создать метод getCountTheSameLastName(Map map, String lastName), который должен вернуть количество
    пар с фамилией, которая приходит в аргумент lastName
    */
    /* Удалить всех людей, родившихся летом
    Создать словарь (Map) и занести в него 5 записей по принципу: «фамилия» - «дата рождения».
    Удалить из словаря всех людей, родившихся летом.
    map.put("Jhon", new Date("JUNE 1 1980"));
    map.put("Mark", new Date("JUNE 5 1999"));
    map.put("Elone", new Date("DECEMBER 13 1996"));
    map.put("Stieve", new Date("JUNE 1 1980"));
    map.put("Clark", new Date("MARCH 1 1980"));
    */
    /* Удалить людей, имеющих одинаковые имена
    Создать словарь (Map) занести в него десять записей по принципу «фамилия» - «имя».
    Удалить людей, имеющих одинаковые имена.
    map.put("Rooney", "Leo");
    map.put("Lloris", "Hugo");
    map.put("Messi", "Leo");
    map.put("Ronaldo", "Cristiano");
    map.put("Maldini", "Paolo");
    map.put("Indzaghi", "Pipo");
    map.put("Del Piero", "Alesandro");
    map.put("Balotelli", "Mario");
    map.put("Gotze", "Mario");
    map.put("Gomez", "Mario");
    */
    /*
    Программа вводит с клавиатуры имя месяца и выводит его номер на экран в виде: «May is 5 month».
    map.put("January",1);
    map.put("February",2);
    map.put("March",3);
    map.put("April",4);
    map.put("May",5);
    map.put("June",6);
    map.put("July",7);
    map.put("August",8);
    map.put("September",9);
    map.put("October",10);
    map.put("November",11);
    map.put("December",12);
    */

    • @TSAR_TOP
      @TSAR_TOP 4 ปีที่แล้ว

      в 1 задаче ловушка джокера, я искал реализации мапы с одинаковыми ключами-фамилиями

    • @TSAR_TOP
      @TSAR_TOP 4 ปีที่แล้ว

      Я до сих пор не понял 1 задачу. Получается, нужно вводить просто разные фамилии? Какой тогда смысл проверять количество одинковых, если их либо нет, либо она одна?
      Или всё таки как-то нужно засунуть в ключи одинаковые фамилии?

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว

      @@TSAR_TOP всё верно, фамилия будет максимум одна. Смысл в том, что бы ты поработал с ключами в map :)

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว

      @@TSAR_TOP можно конечно и одинаковые фамилии в ключ засунуть, но там уже будет не String, а какой-то кастомный класс, типа User, с полями id, lastName. Но в этой задаче это можно не делать.

    • @TSAR_TOP
      @TSAR_TOP 4 ปีที่แล้ว

      @@artemvorov спасибо

  • @aramzoryan
    @aramzoryan 4 ปีที่แล้ว

    Два дня пыхтел. Знаний конечно пока не хватает.
    package com.company.DZ.hashMap5;
    import java.util.*;
    public class Main {
    public static void main(String[] args) {
    Map map=new HashMap();
    map.put("Ivanov","Ivan");
    map.put("Popov","Sergey");
    map.put("Petrov","Ivan");
    map.put("Krylov","Opupey");
    map.put("Sidorov","Sergey");
    map.put("Drozdov","Varfalamey");
    map.put("Drodov","Varfalamey");
    map.put("Ordov","Varfalamey");
    int i=0;
    for (Map.Entry entry : map.entrySet()) {
    i++;
    }
    for (int j = 0; j entry.getValue().equals(a));
    }

    for (Map.Entry entry : map.entrySet()) {
    System.out.println(entry);}
    }
    public static String removeDubl(Map map){
    String str=null;
    for (String value : map.values()) {
    int count=0;
    for (String s : map.values()) {
    if (value.equals(s)){
    count++;
    if (count>1){str=value;}
    }
    }
    }
    return str;
    }
    }

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว +1

      А этот кусок кода зачем здесь?
      int i=0;
      for (Map.Entry entry : map.entrySet()) {
      i++;
      }
      Это ты так map.size() заменил?)

    • @aramzoryan
      @aramzoryan 4 ปีที่แล้ว +1

      @@artemvorov Забыл про map.size() . Заклинило.

    • @artemvorov
      @artemvorov  4 ปีที่แล้ว +1

      ​@@aramzoryan
      И здесь
      if (count>1){str=value;}
      лучше сделать так:
      if (count > 1) {
      return value;
      }
      Так ты не будешь делать кучу лишних иттераций, а сразу будешь обрывать цикл. Если у тебя count > 1 ты уже можешь сказать, что эту пару надо удалять, а в твоём варианте ты продолжаешь искать повторения, причём даже у других значений.