Bom, acho que quanto à pergunta inicial não há mais duvida. Para quem ainda não
estiver satisfeito é só fazer um teste:
Boolean b = new Boolean(true);
Integer i = new Integer(1231);
if (i.hashCode() == b.hashCode()) {
System.out.println("Yes, hashCode não é unico!");
}
Agora, é claro que é possível gerar um hashCode() único entre objetos de uma classe X
ou Y, só depende da sua implementação. Se você quiser gerar hashcodes únicos para
instancias da classe X dentro de uma única JVM:
public class X {
private static int nextHashCode = Integer.MIN_VALUE;
public final int hashCode() {
int code;
synchronized(X.class) {
code = nextHashCode;
nextHashCode++;
}
return code;
}
}
Note que o método hashCode deve ser declarado final para que alguem não o redefina em
uma subclasse de X e acabe com a propriedade "x1 instanceof X && x2 instanceof X &&
x1.equals(x2) => x1.hashCode() == x2.hashCode()".
Para fazer o mesmo em um ambiente distribuido já fica mais complicado... ai seria
necessário usar algum meio de comunicação entre as JVMs para negociar a distribuição
de hashCodes. Em http://www2.theserverside.com/patterns/thread.jsp?thread_id=4976 tem
uma discussão sobre como gerar identificadores únicos globais...
-- Leonardo Bueno.
----- Original Message -----
From: "Sven van ´t Veer" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, April 17, 2001 11:42 AM
Subject: Re: [java-list] Hash Code???
> Bruno Diniz de Paula wrote:
>
> > Como o Leonardo disse, eles NAO identificam unicamente um
> > objeto. Pense por exemplo em um objeto que possua "chave
> > primaria" composta (dois int por exemplo). Fatalmente haverao
> > repeticoes no hashCode, independente da operacao (soma,
> > multiplicacao, bitwise, etc) que voce fizer com os numeros.
>
> Isso não necessariamente é assim. Houve uma discussão boa na lista
> EJB-INTEREST da sun aonde Jonathan Weedon (project leader da VisiBroker
> & Inprise Application Server) & David Wolf (Sybase Application Server)
> discutiram maneiras de implementação de hashCode do primary key class
> (pk composto) numa tal maneira que não haverá repetições. Devido à
> ferias infelizmente perdi grande parte deste discussão mas a conclusão
> era que é possivel implementar o hashcode de chaves primárias compostos
> sem repetições. Explicaram que até é necessaria pois um hashcode
> repetido em chaves primárias distintos quer dizer que o EJB container
> não poderia otomalizar o acesso aos entity beans já instatiado no container.
>
>
> ------------------------------ LISTA SOUJAVA ----------------------------
> http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para [EMAIL PROTECTED]
> -------------------------------------------------------------------------
>
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------