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.
Antes de compreender o funcionamento interno do HashMap, você deve estar ciente dos métodos hashCode() e equals().
retornando um array 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.
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.
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
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.