Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ex. 17 da Aula 5 - Collections framework - hashCode()

Pessoal boa tarde, estou com uma duvida, qual seria a diferença entre esse dois códigos?

@Override
    public int hashCode() {
        return this.getNumero();
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + numero;
        return result;
    }

Qual a importância de embaralhar no caso do ultimo hashCode()?

3 respostas

O primeiro só esta retornando uma variável "numero" . O segundo esta criando um hashcode a partir de uma variável "numero" e retornando esse hashcode

Kaique, isso eu sei, mas qual o objetivo?

solução!

Encontrei essa explicação aqui: http://www.guj.com.br/t/resolvido-real-necessidade-do-hashcode/138573 acho q é o jeito mais facil pra vc entender

O contrato do hashcode é que dois objetos iguais (objA.equals(objB)) devem ter o mesmo hashcode (objA.hashCode() == objB.hashCode()). Isso porque objetos que usam o hashcode, como HashSet ou HashMap, usam slots internos, como esse exemplo de Set...

hashCode 0 -> "a", "b" hashCode 1 -> "c", "d", "e" hashCode 2 -> "f"

Sets não possuem objetos repetidos. Imagine que vc vai adicionar outro objeto no set acima. Vc vai adicionar um outro objeto "a", mas que não possua o mesmo hashCode que o objeto "a" que já existe no Set. A primeira coisa que o set faz é achar o slot onde o novo objeto estaria. Imagine que o teu novo objeto tenha "hashCode 2". O HashSet verá se existe outro objeto no slot "hashCode 2" que seja igual ao novo objeto "a". "hashCode 2" possui apenas o objeto "f", portanto serial "legal" adicionar o objeto "a" neste slot. O resultado seria um Set como...

hashCode 0 -> "a", "b" hashCode 1 -> "c", "d", "e" hashCode 2 -> "f", "a"