Em qual exemplo pratico irei prescisar desse método ele me retorna o código hash do elemento em questão a partir de qual chave…??? alguém poderia me explicar como esse método funciona
essa classe ai de hash eu que fiz, mas nela vc escolhe a chave
import javax.swing.JOptionPane;
public class TestaHash
{
public static int testaString(String x,int m)
{
int tam=x.length();
int soma=0;
int posicao;
int i;
char vet[]= new char[tam];
for(i=0;i<tam;i++)
{
soma+=x.charAt(i);
}
posicao = soma%m;
return posicao;
}
public static void main(String[] args)
{
TestaHash chama = new TestaHash();
int i,y;
String x;
i=Integer.parseInt(JOptionPane.showInputDialog("Dígite o número"));
x=JOptionPane.showInputDialog("Dígite a letra");
y=chama.testaString(x,i);
System.out.print(y);
}
}
e do java como é…?
Basicamente, o hashCode é um método que retorna números iguais para objetos iguais. Esses números não são necessariamente únicos, e não precisam ser idênticos de uma execução para outra do programa, mas devem ter baixa probabilidade de se repetir.
Alguns algoritmos são otimizados para utilizarem-se do hash. Por exemplo, o HashMap possui uma lista de listas e usa o seguinte algoritmo para associar uma chave ao mapa:
- Obtém o hashCode da chave.
- Divide a chave pelo tamanho do mapa (obtendo um número dentro do mapa);
- Busca em sua lista principal a lista em que o objeto será cadastrado usando o número encontrado;
- Cadastra o objeto na lista daquela posição.
Note que isso é extremamente rápido. Você pode inserir diversos objetos, que o mapa não irá buscar pela lista dele inteira e sim, apenas nas posições onde o hash indicar. Aqui também fica fácil de ver algumas das restrições do HashMap. O Hash da chave deve ser constante, ou seja, chaves de objetos mutáveis podem te trazer sérios problemas. Outro problema é que um mapa muito pequeno ou o uso de algoritmos de hash ruins podem irão gerar diversas colisões de hash (objetos na mesma posição) e isso pode degradar a performance do mapa.
A regra básica do hash é:
Objetos iguais devem ter hash codes iguais.
Para saber como implementar essa regra em suas classes dê uma lida no item 8, capítulo 3 do Effective Java aqui e depois leia esse tópico.
Complementando o que o Vini colocou.
Para sistemas que armazenam informações em banco de dados relacionais, as chaves primárias são fortes candidatas a serem o código hash do objeto que representam ou armazenam as tuplas. Apenas tome cuidado com chaves compostas formado por campos numéricos. Neste caso, recomenda-se o uso de um separador, exemplo:
chave na tabela: campo1 + campo2 (ambos campos numéricos)
então para o hash faça algo assim:
int code = (campo1 + “-” + campo2).hashCode();
existe um ótimo exemplo baseado no texto de Joshua Bloch em:
http://www.javapractices.com/Topic28.cjp
:lol: