Dúvida questão Examulator - equals e hashCode

5 respostas
Java_Player

Given the following class definition

public class ValuePair implements Comparable{
    private int  iLookUp;        
    public ValuePair(int iLookUP, String sValue){
        this.iLookUp=iLookUp;     
    }
    
  
    public void setLookUp(int iLookUp){
        this.iLookUp = iLookUp;
    }
    public int getLookUp(){
        return iLookUp;
    }
  
    public boolean equals(Object o){
        Integer iwLookUp = (Integer) o;
        if(iLookUp == iwLookUp.intValue()){
	    return true;
	}
        return false;
    }
    
   
    public int compareTo(Object o) {
        ValuePair vp = (ValuePair) o;
        Integer iwLookUp= new Integer(vp.getLookUp());
        if(iwLookUp.intValue() < iLookUp){
            return -1;
        }
        
        if(iwLookUp.intValue() > iLookUp){
            return +1;
        }
        return 0;
    }
    
}

Which of the following would be valid hashCode methods?

public int hashCode() { return (int) System.currentTimeMillis(); }

public char hashCode(){ reuturn (char) iLookUp; }

public int hashCode(){ return iLookUp; }

public int hashCode(){ return iLookUp * 100; }

The Correct Answer is

3)

public int hashCode(){

return iLookUp;

}
public int hashCode(){

return iLookUp * 100;

}

The value returned by the hashCode method must be an integer which rules out option 2 which returns a char value. Option 1 returns a version of the time in milliseconds which is certain to return a different value during a single run of the program, thus breaking one of the specific requirements of the contract for hashCode. The correct options, 3 and 4 may not be particularly good versions of the hashCode method but they are consistent with the equals value and return the correct data type.


Não entendi essa questão… Se o método equals() já não está apropriado, como podemos ter uma implementação do hashCode() apropriada??

Alguém entendeu essa questão?

5 Respostas

Bohzzu

Me parece que o existe um erro no método equals. Ele deveria ser algo +/- assim:

public boolean equals(Object o){  
  ValuePair vp = (ValuePair) o;  
  Integer iwLookUp= new Integer(vp.getLookUp()); 
  if(iLookUp == iwLookUp.intValue()){  
    return true;  
  }  
  return false;  
}

De qualquer forma o método hash code deve retornar um valor inteiro (o que já descarta a segunda opção) e que o hashCode deve ser o mesmo para quais quer dois objetos cujo o método equals retorna true.

Creio que este era o ponto da questão, mas como vc mesmo disse o método equals não parece apropriado!
De onde veio esta questão?

ViniGodoy

Péssima questão.

O equals não trata o caso do nulo e ainda compara objetos de classes diferentes.
Realmente, não faz sentido falar em hash code nesse caso…

Java_Player

Bohzzu:
Creio que este era o ponto da questão, mas como vc mesmo disse o método equals não parece apropriado!
De onde veio esta questão?

Do Examulator:
http://www.examulator.com/phezam/selectsubject.php

Só espero que no exame não tenha esse tipo de erros…

Tá meio difícil achar simulados bons… Acho que vou acabar comprando o Whizlabs…

tecnocrata

huum , voce conhece alguem que comprou o whizlab , vale a pena ??

Java_Player

Todo mundo fala que vale muito a pena. Faça uma busca aqui no fórum mesmo que você vai ver.

Criado 15 de junho de 2008
Ultima resposta 15 de jun. de 2008
Respostas 5
Participantes 4