Hashcode()

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:

  1. Obtém o hashCode da chave.
  2. Divide a chave pelo tamanho do mapa (obtendo um número dentro do mapa);
  3. Busca em sua lista principal a lista em que o objeto será cadastrado usando o número encontrado;
  4. 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: