Hash code

4 respostas
F

Por gentileza alguem poderia me explicar em que situacao um hascode sobrescrito nao é eficiente ou ate inapropriado estou estudando pelo livro sierra mas nao encontrei exemplos didaticos.Alem do mais se alguem sabe indicar alguma boa referencia para a parte de collection que tambem estou em alto mar
agradeço desde ja!!

4 Respostas

ViniGodoy

Ineficiente:

Quando um hashcode acaba sendo repetido para vários objetos iguais. Exemplo:

public int hashCode() {
   return 1;
}

Esse hashcode é valido. Dois objetos iguais sempre retornam o mesmo hash. Porém, não é muito eficiente. Dois objetos diferentes também tem altíssimas chances (nesse caso 100%) de retornar o mesmo valor.

Inapropriado:

Quando o hash retorna valores diferentes para objetos iguais. Isso é uma violação da interface do hashCode e equals. Exemplo:

public void equals(Object other) {
    if (other == null) return false;
    if (other.getClass() != getClass()) return false;
    return ((MyClass)other).phoneNumber == phoneNumber;
}

public int hashCode() {
    return id;
}

Nesse caso, haveria problemas sérios se dois objetos com ids diferentes tivesse associados ao mesmo phoneNumber. O hashcode seria diferente, mas os objetos retornariam true no equals.

Um ótimo material sobre hash code e equals está no livro effective java. Não deixe de ler, o capítulo está disponível online no site do autor:
http://java.sun.com/docs/books/effective/chapters.html

ViniGodoy

Algumas boas referências sobre collections:
http://java.sun.com/developer/Books/javaprogramming/corejava/
http://java.sun.com/docs/books/tutorial/collections/index.html

F

ViniGodoy:
Algumas boas referências sobre collections:
http://java.sun.com/developer/Books/javaprogramming/corejava/
http://java.sun.com/docs/books/tutorial/collections/index.html

Obrigado ViniGodoy!

F

Ola ViniGodoy queria te parabenizar pelo site :slight_smile: muito bom ,era um tempo que estavo procurando algo para jogos e finalmente encontrei. Tenho uma base em c mas agora estou estudando para scjp java ,mas qd acabar os estudos vou entrar na area de jogos com tudo pois tenho bastante interesse. Como exercicios implementei alguns quebra cabeça do tipo 8 rainhas o passeio do cavalo em c sem interface grafica ,só como base e se vc tivar algumas sujestoes
serao muito bem aceitas!!
valeu!!

Criado 29 de novembro de 2007
Ultima resposta 29 de nov. de 2007
Respostas 4
Participantes 2