contrato: dois objetos considerados iguais devem gerar hashCodes iguais.
Porque seguir esse contrato ?
Qual a vantagem do seu uso ?
E se eu não usar ?
contrato: dois objetos considerados iguais devem gerar hashCodes iguais.
Porque seguir esse contrato ?
Qual a vantagem do seu uso ?
E se eu não usar ?
Se você utilizar uma coleção que não permita repetição de elementos você deve implementar o equals() e hashCode() para definir qual critério que dirá que um objeto é único.
Quando adicionamos elementos a uma coleção do tipo HashMap devemos informar a chave e o conteúdo que será associado a chave. Um elemento desse HashMap é considerado único pela sua chave, ele não permite chaves duplicadas, mas diferentes de outros tipos de coleções que simplesmente não permitam objetos considerados iguais/duplicados a serem adicionados, o HashMap escreve o conteúdo do objeto da chave "repetida" que você está inserindo, ele sobreescreve o conteúdo, não a chave!
//chave //conteúdo
Map <Integer, String> map = new HashMap<Integer, String>();
map.put(1, "teste");
map.put(2, "qwerty");
map.put(3, "asdfg");
map.put(1, "Inseri outro objeto com chave igual a 1 mas o conteúdo é diferente " +
"então o HashMap 'sobreescreve' somente o conteúdo não muda a chave, " +
"como a classe Integer implementa o método hashCode() e equals(), o HashMap 'sabe' " +
"se a chave será considerada repetida ou não.");
O HashMap usa uma tabela hash para armazenar seus elementos e poder fazer esse "esquema" de "sobreescrever conteúdo", você precisa implementar o método hashcode() junto com o equals() para definir qual será o critério para a chave, Numa classe conta por exemplo pode ser o número da conta.
Acho que não existe vantagem ou desvantagem depende do contexto do problema que vc quer resolver, cada tipo de coleção é recomendada para determinada situação... o HashMap pra essa situação: se vc quiser armazenar chaves e valores e quiser "atualizar" seus conteúdos. Outras coleções simplesmente não deixam isso acontecer "barram" a inserção só por causa da chave.
Se vc tiver um HashMap que usa como chave um objeto de uma classe sua que não implementa o equals e hashcode vc não está declarando o critério para esse "esquema" de verificação de chave duplicada, o que acontece se vc fizer isso? faça o teste, creio que não dará certo