Урок 16 - HashMap в деталях. Часть 2 (прокачанная Java)

Поділитися
Вставка
  • Опубліковано 16 січ 2025

КОМЕНТАРІ • 62

  • @dibehemoth401
    @dibehemoth401 Рік тому +15

    Есть мнение, что Заур красавчик. Очень хорошо объясняешь! 👍

  • @goodvideobro
    @goodvideobro Рік тому +1

    Благодаря вашей подаче, темы которые кажутся на первый взгляд сложными, превращаются в простые

  • @markarkron8443
    @markarkron8443 3 роки тому +8

    Просто лучший урок! Прекрасная работа, спасибо

  • @apacheMax
    @apacheMax Рік тому +1

    очень хорошо объяснена тема, меня немного на ней потопили на собесе, но с помощью твоих видосов я преисполнился, спасибо, здоровья!

  • @IIJustIIsicariusII
    @IIJustIIsicariusII 3 роки тому +4

    Очень хорошее объяснение про работу HashMap! Спасибо!

  • @_remedios
    @_remedios 2 роки тому +2

    Заур, шикарно объясняешь, спасибо!

  • @mikhailb9978
    @mikhailb9978 9 місяців тому

    Спасибо, очень грамотное объяснение, приятно слушать

  • @Kolodan
    @Kolodan 3 роки тому +3

    Спасибо большое! Все понятно!

  • @Seymoon
    @Seymoon 4 місяці тому +1

    while(true){
    System.out.println("Заур спасибо!");
    }

  • @markchesnavsky3273
    @markchesnavsky3273 2 роки тому +1

    Очень полезное видео. Большое спасибо.

  • @sardoramanov8960
    @sardoramanov8960 2 роки тому

    Спасибо тебе огромное. Очень помог разобратся с hashMap.

  • @АлександрАлександров-ю4х5с

    Спасибо !!!Круто объяснил)))

  • @TerebeninEP
    @TerebeninEP 3 роки тому

    Лучшее объяснение!

  • @Stavr0gin_
    @Stavr0gin_ 2 роки тому

    Заур спасибо!
    Курс купил ;)

  • @denys_pits
    @denys_pits 3 роки тому +1

    Отличное видео

  • @Vladimir-pz5eo
    @Vladimir-pz5eo 3 роки тому

    спасибо за урок!

  • @ЕвгенийСокирко-д1в

    Ну это очень круто

  • @АнтонГордеев-ч6у

    Лучше было бы просто исключить курс из расчета equals и hashcode потому что люди могут менять курс, но при этом они остаются теми же людьми)

    • @programaniya
      @programaniya  Рік тому +1

      Отличный комментарий!

  • @Krasnolesye
    @Krasnolesye 3 роки тому

    спасибо!

  • @breakkingsha
    @breakkingsha 5 місяців тому +1

    чему должно быть равно числ коллизий чтобы hashmap перестроился в красночерное дерево?

    • @programaniya
      @programaniya  5 місяців тому +1

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

  • @diimadurx
    @diimadurx Рік тому +1

    Подскажите есль есть в Вашем уроке, то в каком, примеры с одинаковыми ключами в Map.
    И спасибо за Ваши уроки!

    • @programaniya
      @programaniya  Рік тому

      Здравствуйте. Вы не нашли такого примера в этом уроке?

    • @diimadurx
      @diimadurx Рік тому

      @@programaniya возможно есть. Я ещё в пути, на других видео. Если есть в этом, то под нужным видео оказался

    • @programaniya
      @programaniya  Рік тому

      Так и есть :)

  • @OJIeLLlka
    @OJIeLLlka 2 роки тому +3

    Я так понимаю, что если вдруг есть поля, которые по ходу "жизни" объекта нужно изменять(тот же курс, на котором студент учится), можно просто написать реализацию хешкода, которая от этого динамически изменяемого(не final) поля не будет зависеть? тем самым, с изменением данного поля, объект для хешмапы будет оставаться immutable т.к. хэшкод не изменился? это нормальная практика же?

    • @programaniya
      @programaniya  2 роки тому +2

      Да, всё верно. Хороший комментарий!

  • @johnquest82
    @johnquest82 11 місяців тому +1

    Здравствуйте, спасибо за уроки, но хотелось бы уточнить: в массиве хранятся же не LinkedList, а ноды в виде односвязного списка? Просто непонятно, ячейка массива - это экземпляр класса LinkedList или Node

    • @programaniya
      @programaniya  11 місяців тому

      Здравствуйте. Благодарю за вопрос. В данном контексте воспринимайте оба понятия, как взаимозаменяемые. Нода - это тоже список.

  • @VoidObj
    @VoidObj 4 роки тому +5

    Спасибо) Только вместо "несложного алгоритма" можно было просто уточнить, что хэш делится на кол-во бакетов :) Потому что это могут и спросить на интервью )

    • @programaniya
      @programaniya  4 роки тому +1

      Не очень понял, что значит "хэш делится на кол-во бакетов"? А так, про бакеты в уроке даётся полная информация ;)

    • @VoidObj
      @VoidObj 4 роки тому +7

      @@programaniya Я имел ввиду, что если у нас 100 бакетов а итоговый хэш объекта например 11005, то остаток от деления 11005/100 = 5 и будет номером бакета) Я уже не помню, говорили ли вы это или нет, я пожалуй не буду пересматривать )

    • @AibekDandaev
      @AibekDandaev Рік тому

      In Java, hash tables are implemented as arrays of linked lists. Each list is
      called a bucket (see Figure 9.10). To find the place of an object in the table,
      compute its hash code and reduce it modulo the total number of buckets. The
      resulting number is the index of the bucket that holds the element. For
      example, if an object has hash code 76268 and there are 128 buckets, then
      the object is placed in bucket 108 (because the remainder 76268 % 128 is
      108). Perhaps you are lucky and there is no other element in that bucket.
      Then, you simply insert the element into that bucket. Of course, sometimes
      you will hit a bucket that is already filled. This is called a hash collision.
      Then, compare the new object with all objects in that bucket to see if it is
      already present. If the hash codes are reasonably randomly distributed and
      the number of buckets is large enough, only a few comparisons should be
      necessary.@@programaniya

    • @9080artur
      @9080artur Рік тому

      нет, для расчета индекса используются операции сдвига (>>>) и побитовые операции (^) обработки хэш-кода @@VoidObj

  • @ИльяГорбачёв-х8о
    @ИльяГорбачёв-х8о 3 роки тому

    вваааууууу. Спасибо !

  • @МихаилЦирдава
    @МихаилЦирдава 3 роки тому +3

    На самом деле там не "честная" сложность О(1), а "округленная" до константного значения. Это используется для упрощения. В HashMap по определению не может быть О(1) т.к. используется LinkedList доступ к элементам которого О(n). Среднее же время работы будет О(1 + α), где α - коэффициент загрузки LinkedList, т.е. чем больше элементов в конкретном LInkedList'е тем дольше будет происходить доступ к последнему элементу.

    • @programaniya
      @programaniya  3 роки тому

      Совершенно верно. Рассматривается случай идеальной мапы, конда каждый LinkedList содержит лишь 1 элемент.

    • @EctxD
      @EctxD 2 роки тому

      Ну это очевидно

  • @ГришманМихаил
    @ГришманМихаил 3 місяці тому +1

    А load factor разве может быть > 1?

    • @programaniya
      @programaniya  3 місяці тому

      Ваш вопрос легко проверить.

  • @СашаФесько-ш9р
    @СашаФесько-ш9р Рік тому

    Почему тогда вместо LinkedList не юзать сбалансированные деревья с самого начала? Ведь же O(logN) быстрее O(n)

    • @programaniya
      @programaniya  Рік тому

      Вопрос скорее к разработчикам.

  • @ИванПоддубный-б3у
    @ИванПоддубный-б3у 2 роки тому

    Разве изначально массив не заполнится null? Не понял почему при большом капасити, сразу будет много памяти занимать

    • @programaniya
      @programaniya  2 роки тому +1

      Без разницы чем заполнен массив. Всё равно при его создании выделяется память, соответствующая его длине.

    • @HyperTextTransferProtocol-l6m
      @HyperTextTransferProtocol-l6m 2 роки тому

      Это тоже самое что там long , неважно как-то там число хранится, он все равно занимает 8 байт

  • @artaqa
    @artaqa 2 роки тому +1

    Зравствуйте! Отличное видео. Но у меня возник вопрос. В уроке про LinkedList Вы говорил что put() и remove() это быстрые операции т.к только переписываются ссылки на элементы. А здесь вы говорите что добавление и удаление в LinkedList это всегда O(n), а не константное...где ошибка?)

    • @u_n_d_e_r_s_c_o_r_e_d
      @u_n_d_e_r_s_c_o_r_e_d 2 роки тому

      В этом видео ошибка

    • @artaqa
      @artaqa 2 роки тому

      @@u_n_d_e_r_s_c_o_r_e_d Я правильно понимаю, что добавление и удаление в LinkedList это всегда O(1) т.к просто нужно перезаписать ссылки на элементы коллекции ?

    • @u_n_d_e_r_s_c_o_r_e_d
      @u_n_d_e_r_s_c_o_r_e_d 2 роки тому +1

      @@artaqa да

    • @programaniya
      @programaniya  2 роки тому +1

      Нигде ошибки нет. Всё зависит от того, куда вы вставляете элемент или откуда его удаляете. Если начало/конец списка, то это быстро. Если операция происходит ближе к середине листа, то это O(n). Учитывая, что всегда в расчёт берётся не частный, а общий случай, то добавление и удаление элемента в LinkedList происходит за O(n).

  • @andreyp.541
    @andreyp.541 3 роки тому

    Здравствуйте. Вы показали для чего использовать final поля , но я не понял, что нам даст запрет наследования от класса Student? Каким образом он влияет на hashCode()?

    • @programaniya
      @programaniya  3 роки тому

      Здравствуйте. Это делается для того, чтобы никто не смог наследовать ваш класс, используемый в качестве ключа и не "испортить" метод hashCode. Ведь классы наследники также смогут выступать в роли ключей, а плохо написанный hashCode обеспечит вам большое колличество коллизий.

  • @BookwormYevgen
    @BookwormYevgen 3 роки тому

    А если не final делать поля свойств и класс, а для вычисления хэш кода использовать только значение ключа?

    • @programaniya
      @programaniya  3 роки тому

      Можете привести пример?

  • @Sooderone
    @Sooderone 6 місяців тому

    🧠

  • @egorbakhorikov6819
    @egorbakhorikov6819 Рік тому

    Определение сбалансированного дерева строится на том, что высота любых двух поддеревьев от одного узла, отличается не более чем на 1. Из этого и следует, что поиск будет логарифмический. Ваше определение это определение это не определение сбалансированного дерева.

    • @egorbakhorikov6819
      @egorbakhorikov6819 Рік тому

      да, конечно, условие из видео также необходимо для доказательства асимптотики, но всё же это не определение сбалансированного дерева

    • @programaniya
      @programaniya  Рік тому

      Так в уроке не было определения сбалансированного дерева. Я просто озвучил одну из характеристик такого дерева, которую посчитал необходимой для данного урока.

  • @logn9892
    @logn9892 Рік тому

    в худшем случае с O(n) до O(log n)*