Duvida com hashCode

[quote=Felagund][quote=sergiotaborda]
Já agora , nunca , nunca, nunca, (…) , nunca , nunca façam um if/else que retorna boleano

Isto

public boolean equals(Aluno a)
{
    if (getNome().equals(a.getNome()) && getTurno().equals(a.getTurno()) //....
    {
        return true;
    }
    else
    {
        return false;
    }
}

Se substitui por :

public boolean equals(Aluno a)
{
    return getNome().equals(a.getNome()) && getTurno().equals(a.getTurno()) //....
}

[/quote]

Vejo algum null pointer a caminho em qualquer uma dessa condições :)[/quote]

No caso de um bean como este sim vc precisa de verificação de null.
Mas esse não era o ponto … o ponto era o estilo de programação aprendiz de feiticeiro do primeiro codigo :slight_smile:

ops copiar e colar eh uma desgraça… já arrumei as coisas gritantes que estavam ai ^^’

muito obrigado =D

Valeu ViniGodoy, vou dar uma olhada!
Tudo o que vc falou eu já tinha aprendido, mas é complicado lembrar… Espero que o renato_ramos esteja se achando no meio desse tópico =P

sergiotaborda… Aprendiz de feiticeiro?

Foi só uma programação leviana. Rs…

[quote=Marcos Lima]Puts, ViniGodoy, vc está me destruindo…
Acho que vou ler um livro, hahaha…[/quote]

Nada pessoal, entretanto. heheheehh

Eu é que sou chato mesmo. Principalmente no Java Básico.

ahaha

Que diabos…?

[quote=Marcos Lima]Valeu ViniGodoy, vou dar uma olhada!
Tudo o que vc falou eu já tinha aprendido, mas é complicado lembrar… Espero que o renato_ramos esteja se achando no meio desse tópico =P[/quote]

sim sim me achei agora está assim e funcinou, só adiciono um objeto só

public class Aluno implements Comparable{
    private String nome, turno, semestre;
    private int matricula;

    public Aluno() {
        setNome("");
        setTurno("");
        setSemestre("");
        setMatricula(0);
    }

//gets e sets.

 
    @Override
    public boolean equals(Object obj)
    {
        Aluno a = (Aluno)obj;
        return (!(obj == null)) &&
                getNome().equals(a.getNome()) &&
                getSemestre().equals(a.getSemestre()) &&
                getTurno().equals(a.getTurno());
    }

    @Override
    public String toString(){
        String string = "Nome : " + getNome() +
                        "Turno: " + getTurno() +
                        "Semestre: " + getSemestre() +
                        "Matricula: " + getMatricula();
        return string;
    }
    
    @Override
    public int compareTo(Object o) {
        Aluno outroAluno = (Aluno) o;
        if(outroAluno.getMatricula() > this.matricula)
            return 1;
        else if(outroAluno.getMatricula() == this.matricula)
            return 0;
        else
            return -1;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 97 * hash + (this.turno != null ? this.turno.hashCode() : 0);
        hash = 97 * hash + (this.semestre != null ? this.semestre.hashCode() : 0);
        hash = 97 * hash + this.matricula;
        return hash;
    }


}

[quote=renato_ramos]minha classe inteira
[/quote]

Tem mais um problema ai. O equals deve testar se a classe passada é compativel


    @Override
    public boolean equals(Object obj)
    {
        if( !( obj instanceof Aluno)l){
            return false;
        }

        Aluno a = (Aluno)obj;
        return (!(obj == null)) &&
                getNome().equals(a.getNome()) &&
                getSemestre().equals(a.getSemestre()) &&
                getTurno().equals(a.getTurno());
    }


}

O instanceof retorna falso se o objeto não for da classe. Se for null, ele obviamente não é da classe.
Sem esta verificação não é licito fazer o cast mais em baixo podendo levar um ClassCastException e essa exceção não é primitida para o método equals (ver no javadoc).

Valeu sergio!

agora surgiu outra questao lol

colocando somente a matricula no hash… agora está adicionando dois objetos com proriedades diferentes no hashset \o/

aaa negocio complicado !!

vo batalhando contra essa coisa aki xD

muito obrigado pela atenção messmo!

desculpem o double post.

mas acho que entendi me acertem se estiver errado xD

na hora de adicionar no hashset é executado o hashCode do objeto se for igual … ele verifica se é igual mesmo com o equals()

por isso os dois tem que ser implementados com os mesmos paremetros.

tah certo??

obrigaddoo!!