Какво е хеширане
Това е процес на преобразуване на обект в цяло число. Целочислената стойност помага при индексиране и по-бързо търсене.
Какво е HashMap
HashMap е част от рамката за събиране на Java. Той използва техника, наречена хеширане. Той реализира интерфейса на картата. Той съхранява данните в двойката ключ и стойност. HashMap съдържа масив от възли и възелът е представен като клас. Той използва масив и структура от данни LinkedList вътрешно за съхраняване на ключ и стойност. В HashMap има четири полета.
Преди да разберете вътрешната работа на HashMap, трябва да сте наясно с метода hashCode() и equals().
пружина и пружина mvc
Вмъкване на двойка ключ, стойност в HashMap
Използваме метода put(), за да вмъкнем двойката ключ и стойност в HashMap. Размерът по подразбиране на HashMap е 16 (0 до 15).
Пример
В следващия пример искаме да вмъкнем три двойки (ключ, стойност) в HashMap.
HashMap map = new HashMap(); map.put('Aman', 19); map.put('Sunny', 29); map.put('Ritesh', 39);
Нека да видим при кой индекс двойката ключ, стойност ще бъде запазена в HashMap. Когато извикаме метода put(), той изчислява хеш кода на ключа „Аман“. Да предположим, че хеш кодът на „Aman“ е 2657860. За да съхраним ключа в паметта, трябва да изчислим индекса.
Изчисляване на индекс
Индексът минимизира размера на масива. Формулата за изчисляване на индекса е:
Index = hashcode(Key) & (n-1)
Където n е размерът на масива. Следователно стойността на индекса за „Аман“ е:
Index = 2657860 & (16-1) = 4
Стойността 4 е изчислената стойност на индекса, където ключът и стойността ще се съхраняват в HashMap.
java индекс на
Хеш сблъсък
Това е случаят, когато изчислената стойност на индекса е една и съща за два или повече ключа. Нека изчислим хеш кода за друг ключ „Sunny“. Да предположим, че хеш кодът за „Sunny“ е 63281940. За да съхраним ключа в паметта, трябва да изчислим индекса, като използваме формулата за индекс.
Index=63281940 & (16-1) = 4
Стойността 4 е изчислената стойност на индекса, където ключът ще се съхранява в HashMap. В този случай методът equals() проверява дали и двата ключа са равни или не. Ако ключовете са еднакви, заменете стойността с текущата стойност. В противен случай свържете този обект на възел към съществуващия обект на възел чрез LinkedList. Следователно и двата ключа ще бъдат съхранени под индекс 4.
По същия начин ще съхраним ключа „Ritesh“. Да предположим, че хеш кодът за ключа е 2349873. Стойността на индекса ще бъде 1. Следователно този ключ ще се съхранява при индекс 1.
метод get() в HashMap
методът get() се използва за получаване на стойността по нейния ключ. Няма да извлече стойността, ако не знаете ключа. Когато се извика метод get(K Key), той изчислява хеш кода на ключа.
Да предположим, че трябва да вземем ключа „Аман“. Следният метод ще бъде извикан.
обхождане на предварителна поръчка
map.get(new Key('Aman'));
Той генерира хеш кода като 2657860. Сега изчислете стойността на индекса на 2657860, като използвате формулата за индекс. Стойността на индекса ще бъде 4, както сме изчислили по-горе. методът get() търси стойността на индекса 4. Той сравнява първия елемент Key с дадения Key. Ако и двата ключа са равни, тогава той връща стойността else check за следващия елемент във възела, ако съществува. В нашия сценарий той се намира като първия елемент на възела и връща стойността 19.
Да донесем друг ключ „Слънчев“.
Хеш кодът на ключа „Sunny“ е 63281940. Изчислената стойност на индекса 63281940 е 4, както сме изчислили за метода put(). Отидете до индекс 4 на масива и сравнете ключа на първия елемент с дадения ключ. Той също така сравнява Keys. В нашия сценарий даденият ключ е вторият елемент, а следващият от възела е нула. Той сравнява втория елемент Key с указания Key и връща стойността 29. Връща null, ако следващият от възела е null.