Всем привет! Это уже 2020 год и что лучше начать новогоднее, чем повторить, что мы уже знали, например, как ходить и дышать и напиться? ржу не могу
Сегодня я мог бы поднять несколько настоящих основных концепций Hashmap в Java. Я почти уверен, что многие из вас уже знают лучше, чем кто-либо на этом. Если это так, не стесняйтесь нажать кнопку GO назад Но если вы немного не уверены или не знаете, о чем я говорю, это зависит от того, что вы потратите на 2 минуты чтения этой статьи!
Что ж, самое известное определение имеет хеш-карту, будет структура данных, которая реализует ассоциативный массив абстрактного типа данных, структуру, которая может отображать ключи от значений.
Чтобы сделать его еще проще, вы знаете, когда мы думаем о массиве, мы, вероятно, будем бы подумать о номере номеров для доступа к определенной ценности. бывший) То же самое идет к хеш-карте, за исключением того, что мы можем использовать ключ вместо номеров индекса значений. Как показано на рисунке ниже, HASHMAP является массивом узлов, которые имеют ключ и значение, что делает вид сверху намного проще и эффективнее с использованием клавишных значений.
Если мы посмотрим в hashmap чуть более подробно, мы видим, что это выглядит как таблица, которая имеет узлы, так называемые ведра, которые могут представлять класс, имеющий следующие объекты:
- K Ключ: Ключевые строковое значение, которое мы используем для поиска UPS
- int hash: Целое число Hashcode из строкового значения ключа
- V Значение: фактическое значение, которое мы хотим получить доступ
- Узел следующий: Чтобы указать на следующую запись или узел
Хорошо, теперь мы вроде понимаем, что такое Hashmap, то нам пора попробовать работать с ним, чтобы понять, как это на самом деле работает.
Чтобы объяснить шаги, чтобы получить доступ к определенной стоимости, используя ключ, прежде всего, я хотел бы вставить некоторые значения на карту сначала для лучшего понимания.
Чтобы вставить значения, мы можем использовать метод PUT (K, V) и к тому, что давайте быстро создадим простой хесмап, называемый Scroes, где мы будем хранить имена и баллы соответственно.
HashMapscores = new HashMap ();
После создания HASHMAP размер карты будет автоматически инициализирован на 16, что делает индекс карты начнется от 0 и отделки до 15.
Теперь скажем, мы хотим поставить эти три записи в карту оценки.
оценки. Путешествие («Смит», «100»); оценки. Путешествие («Блейк», «87»); оценки. Путешествие («король», «100»);
Чтобы начать с первой записи, мы будем проходить через этот метод PUT (), как показано ниже.
put(K k, V v) hash(k) index = hash & (n-1)
Давайте пойдем вперед и начнем вставлять данные.
put(K k, V v) // k = "Smith" and v = "100" hash(k) // This will get the hash of the string key. in this case hash("SMITH")= 79019862 index = hash & (n-1)// n= 16 and index will be 6
После этого процесса карта будет выглядеть так
После последующих одинаковых шагов для всех записей карты в конечном итоге выглядит как ниже
Обратите внимание: я забыл изменить значение хеша для второго рекорда для королей на картинке. просто обратите внимание, что ценность хеша для короля отличается от одного для Блейка
Подождите, удерживайте секунду, некоторые из вас, возможно, заметили, что у нас есть 2 записи в индексе 4 узла. Как это случилось?
Если мы немного прокручиваем туда, где мы получаем индекс HASH & (N-1), мы можем проверить, что эти две записи в конечном итоге имеют тот же индекс, который является 4 в этом случае. Допустим, мы постарались поставить запись Блейка в первую очередь, и не должно быть никаких проблем, как мы поняли данные «Блейк | Hash | Оценка | Нуль», должно быть, необходимо вставить.
Но, поскольку мы вставляем Record Record после того, как мы выясним, что у них есть тот же номер индекса, карта автоматически помещает запись рядом с записью Blake, изменив нулевое значение, чтобы указать на следующий узел, который является король в этом случае. Вот как результат выглядит как карта выше.
Это также приведет нас к этому вопросу. » Если у них есть тот же номер индекса, как мы к ним доступ? »
Для доступа к узлам мы можем использовать метод Get (K). Этот метод выглядит так.
V get(Object key) hash(key) Index = hash & (n-1)
Теперь, скажем, мы хотим найти оценку короля в этом hashmap, используя
scores.get("King")
Тогда он получит хэш, который составляет 2306996 и получит номер индекса, который является 4 в этом случае. В первом узле, который имеет индекс 4, он будет сравнивать Hashcode между HASCODE, который мы ищем, и Hashcode имеет этот узел. Например, HASCODE, который мы ищем, это 2306996, а узел имеет 63281940 в качестве значения хеша. Они не совпадают, поэтому его указывают на следующий узел, который снова сделает сравнение снова. На этот раз Hash Value делает совпадение, так как у него 2306996, которые мы ищем.
Обратите внимание: я забыл изменить значение хеша для второго рекорда для королей. просто обратите внимание, что ценность хеша для короля отличается от одного для Блейка
Хорошо! Сегодня мы говорили о некоторых основных концепциях Hashmap. На самом деле, причина, по которой я привел эту тему сегодня, было то, что я понял, что Hashmap сталкивается с очень часто мы, мы будем И очень легко просто пройти вид, думая, что мы понимаем, как это работает 100%. Однако, когда я столкнулся с некоторыми сложными проблемами, я понял, что я не совсем понимаю, как это работает и как его использовать правильно. Я надеюсь, что это помогло некоторым из вас, ребята, понять немного лучше о Hashmap и не запутаться позже, когда нам действительно нужно пройти некоторые концепции по пути программирования.
Большое спасибо за ваше время, чтобы прочитать эту статью и с новым годом !!!
Оригинал: «https://dev.to/ham8821/super-basic-of-hashmap-in-java-53be»