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"