logo

Funcionamento do HashMap em Java


O que é hash

É o processo de conversão de um objeto em um valor inteiro. O valor inteiro auxilia na indexação e buscas mais rápidas.

O que é HashMap

HashMap faz parte da estrutura de coleção Java. Ele usa uma técnica chamada Hashing. Ele implementa a interface do mapa. Ele armazena os dados no par Chave e Valor. HashMap contém uma matriz de nós e o nó é representado como uma classe. Ele usa um array e uma estrutura de dados LinkedList internamente para armazenar chave e valor. Existem quatro campos no HashMap.

Funcionamento do HashMap em Java

Antes de compreender o funcionamento interno do HashMap, você deve estar ciente dos métodos hashCode() e equals().

retornando um array java
    é igual a():Ele verifica a igualdade de dois objetos. Ele compara a Chave, sejam elas iguais ou não. É um método da classe Object. Ele pode ser substituído. Se você substituir o método equals(), será obrigatório substituir o método hashCode().hashCode():Este é o método da classe de objeto. Ele retorna a referência de memória do objeto em formato inteiro. O valor recebido do método é usado como número do bucket. O número do bucket é o endereço do elemento dentro do mapa. O código hash da chave nula é 0.Baldes:A matriz do nó é chamada de buckets. Cada nó possui uma estrutura de dados como uma LinkedList. Mais de um nó pode compartilhar o mesmo bucket. Pode ser diferente em capacidade.
Funcionamento do HashMap em Java

Inserir chave, par de valores no HashMap

Usamos o método put() para inserir o par Chave e Valor no HashMap. O tamanho padrão do HashMap é 16 (0 a 15).

Exemplo

No exemplo a seguir, queremos inserir três pares (chave, valor) no HashMap.

 HashMap map = new HashMap(); map.put('Aman', 19); map.put('Sunny', 29); map.put('Ritesh', 39); 

Vamos ver em qual índice o par chave-valor será salvo no HashMap. Quando chamamos o método put(), ele calcula o código hash da chave ‘Aman’. Suponha que o código hash de 'Aman' seja 2657860. Para armazenar a chave na memória, temos que calcular o índice.

Calculando Índice

O índice minimiza o tamanho da matriz. A fórmula para cálculo do índice é:

algoritmo para pesquisa binária
 Index = hashcode(Key) & (n-1) 

Onde n é o tamanho da matriz. Portanto, o valor do índice para 'Aman' é:

 Index = 2657860 & (16-1) = 4 

O valor 4 é o valor do índice calculado onde a chave e o valor serão armazenados no HashMap.

Funcionamento do HashMap em Java

Colisão de hash

Este é o caso quando o valor do índice calculado é o mesmo para duas ou mais chaves. Vamos calcular o código hash para outra chave ‘Sunny’. Suponha que o código hash para 'Sunny' seja 63281940. Para armazenar a chave na memória, temos que calcular o índice usando a fórmula do índice.

 Index=63281940 & (16-1) = 4 

O valor 4 é o valor do índice computado onde a chave será armazenada no HashMap. Neste caso, o método equals() verifica se ambas as chaves são iguais ou não. Se as chaves forem iguais, substitua o valor pelo valor atual. Caso contrário, conecte este objeto de nó ao objeto de nó existente por meio do LinkedList. Portanto, ambas as chaves serão armazenadas no índice 4.

Funcionamento do HashMap em Java

Da mesma forma, armazenaremos a chave 'Ritesh'. Suponha que o código hash para a chave seja 2349873. O valor do índice será 1. Portanto, esta chave será armazenada no índice 1.

string comparar java
Funcionamento do HashMap em Java

Método get() em HashMap

O método get() é usado para obter o valor por sua chave. Ele não buscará o valor se você não souber a chave. Quando o método get(K Key) é chamado, ele calcula o código hash da chave.

Suponha que tenhamos que buscar a chave 'Aman'. O seguinte método será chamado.

 map.get(new Key('Aman')); 

Ele gera o código hash como 2657860. Agora calcule o valor do índice 2657860 usando a fórmula do índice. O valor do índice será 4, conforme calculamos acima. O método get() procura o valor do índice 4. Ele compara o primeiro elemento Key com a Key fornecida. Se ambas as chaves forem iguais, ele retornará o valor, caso contrário, verifique o próximo elemento no nó, se ele existir. Em nosso cenário, ele é encontrado como o primeiro elemento do nó e retorna o valor 19.

Vamos buscar outra chave 'Sunny'.

O código hash da chave 'Sunny' é 63281940. O valor do índice calculado de 63281940 é 4, conforme calculamos para o método put(). Vá para o índice 4 do array e compare a chave do primeiro elemento com a chave fornecida. Ele também compara chaves. Em nosso cenário, a chave fornecida é o segundo elemento e o próximo do nó é nulo. Ele compara o segundo elemento Key com a Key especificada e retorna o valor 29. Ele retorna nulo se o próximo nó for nulo.