Questão hashCode TestKiller

5 respostas
Gustavo_Santos

Bom dia galera, não estou enxergando o porque dessas respostas estarem
corretas, segue questão

Which two statements are true about the hashCode method? (Choose two.)

A.) The hashCode method for a given class can be used to test for object equality and object
inequality for that class.

B.) The hashCode method is used by the java.util.SortedSet collection class to order the
elements within that set.

C.) The hashCode method for a given class can be used to test for object inequality, but NOT
object equality, for that class.

D.) The only important characteristic of the values returned by a hashCode method is that the
distribution of values must follow a Gaussian distribution.

E.) The hashCode method is used by the java.util.HashSet collection class to group the
elements within that set into hash buckets for swift retrieval.

Answer: C, E Porque, não entendi !?

Grato a quem ajudar !

5 Respostas

D

Bom dia, não poderei te ajudar nas duas alternativas, mas quanto a C é o seguinte:

Dois só objetos só considerados iguais quando possuem o mesmo hash e a comparação com
equals entre dois objetos retorna true, ou seja, dois objetos com hashcode iguais podem ser considerados
objetos diferentes, mas nunca dois que objetos que são considerados equivalentes devem obrigatoriamente ter
código hashcode iguais.

Qualquer dúvida posta ai.

andersonlandim

Os códigos hash, no caso da alternativa E, servem para colocar os objetos em espécies de “Baldes” para facilitar a busca. No caso do hashset ele busca primeiro nestes baldes e depois utiliza o método equals.

No livro da kathy scjp explica bem esse trecho!

Neste link dá uma boa explicação, dá uma lida: http://javafree.uol.com.br/artigo/6953/Cap-7-Objetos-e-conjuntos.html

evertonsilvagomesjav

Vamos lá:

Alternativa C:

C.) The hashCode method for a given class can be used to test for object inequality, but NOT
object equality, for that class.

Ou seja, o hashCode pode testar a desigualde de um objeto e nao á igualdade porque? Quando o hashCode() for igual o método equals() pode retornar false e os objetos serem diferentes ok?! Agora quando o hashCode for diferente o seu método equals() deve retornar false, logo seu hashCode() pode verificar a desigualdade de objetos, mas quanto a igualde fica por conta do equals(), devido ao fato de que dois objetos podem ter hashCode() iguais mas quem vai verificar mesmo se são vai ser o metodo equals().

Alternativa E:

E.) The hashCode method is used by the java.util.HashSet collection class to group the
elements within that set into hash buckets for swift retrieval.

Devido ao fato de Set’s nao admitirem duplicatas, para saber se sao iguais que métodos vao ser verificados? hashCode() e equals(). Por isso esta tb esta correta.

evertonsilvagomesjav

Só um exemplo de uma implementação bem "tosca" e inconsistente mas que pode servir de teste para voce de equals e hashCode. De que quando os hashs forem diferentes os equals "deviam" retornar false pelo seguinte:

package com.certificação.inner;

import java.util.HashSet;

public class Testando {

	String nome;
	int numero;

    public int hashCode(){
    	
    	System.out.println("hash");
    	
    	return numero;
    	
    }
    
    public boolean equals(Object o){
    	
    	System.out.println("equals");
    	
    	if(this.nome.equals(((Testando)o).nome)){
    		
    		return true;
    		
    	}else{
    		return false;
    	}
    	    	
    }
    
    public static void main(String[] args) {
		
    	Testando t = new Testando();
		t.nome = "everton";
		
		Testando t2 = new Testando();
		t2.numero = 20;
		t2.nome = "everton";
		
		System.out.println(t.equals(t2)); // equals true, mas hashs diferentes.
		
		HashSet<Testando> teste = new HashSet();
		teste.add(t);
		teste.add(t2);
		
		System.out.println(teste.size()); // ou seja o HashSet vai adicionar os dois mesmo quando a implementação do equals for true, devido aos hashs serem diferentes, o HashSet nao vai chegar a olhar o metodo equals().
    	
	}
	
}
Gustavo_Santos

blz vlw galera !

A dúvida era mesmo só na C !!

Boa explicação Evertom !!!

Criado 13 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 5
Participantes 4