How to override equals so that it compares: primitive objects and keys (int, String, double)

1

Can you make the comparison in any way? because in my code, if it is not int or Object the program throws an exception. To be able to use in the method contains the SortSequenceNonOrder class.

Person Class

public class Pessoa implements Comparable {

    private String nome;
    private int idade;

    public Pessoa() {
    }

    public Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public int compareTo(Object o) {
        Pessoa other = (Pessoa) o;

        if (getIdade() < other.getIdade()) {
            return 1;
        } else if (getIdade() > other.getIdade()) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    public boolean equals(Object o) {
        // Se o objeto for uma instacia de Pessoa, comparar idades entre os dois objetos; ex.: p1.equals(o);
        if (o instanceof Pessoa) {
            return ((Pessoa) o).idade == this.idade;
            //Se a entrada não for um objeto, e sim um inteiro ou String comparar com um atributo de Pessoa; ex.: idade.
        } else if (o != null) {
            int x = (Integer) o; // O problema está aqui, se não for inteiro, o programa lanca uma Exception,
            return x == this.idade; // Tem alguma forma de contornar isso?
        } else {
            return false;
        }
    }

    @Override
    public String toString() {
        return "Pessoa{" +
                "nome='" + nome + '\'' +
                ", idade=" + idade +
                '}';
    }
}

ClassNameSequenceNonOrderada:

import java.util.Arrays;

public class ListaSequencialNaoOrdenada implements ILista {

    public Object[] lista;
    public int tamanhoLista;
    public int qtdElementosArmazenados;
    boolean listaInicializada;

    //Vetor extensível.
    public void inicializar(int quantidadeMaxima) {
        lista = new Object[quantidadeMaxima];
        tamanhoLista = quantidadeMaxima;
        qtdElementosArmazenados = 0;
        listaInicializada = true;
    }

    public void adicionar(Comparable o) throws ListaException {
        /**
         * Adicionar em uma posição desejada:
         * for (int i = posElemArmazenado-1; i>=posDesejada; i--){
         *  lista[i+1]=lista[i]
         * lista[r] = e;
         * posElemArmazenado++;
         * }
         */

        if (qtdElementosArmazenados < tamanhoLista) {
            lista[qtdElementosArmazenados] = o;
            qtdElementosArmazenados++;
        } else if (!listaInicializada) {
            throw new ListaException("Lista não inicializada !");
        } else if (qtdElementosArmazenados >= tamanhoLista) {
            throw new ListaException("Lista cheia !");
        }
    }

    public void remover(Object chave) throws ListaException {
        //??? remover um objeto chave ???
        //?remover de uma posicao?
        for (int i = 0; i < qtdElementosArmazenados; i++) {
            if (lista[i].equals(chave)) {
                int pos = i;
                for (int j = pos; j < qtdElementosArmazenados - 1; j++) {
                    lista[j] = lista[j + 1];
                }
                qtdElementosArmazenados--;
            }
        }
    }

    //Como a chave é um objeto, devo utilizar o equals ?!
    //Duvidas nessa parte \/
    public boolean contem(Object chave) throws ListaException {
        if (listaInicializada) {
            for (int i = 0; i < qtdElementosArmazenados; i++) {
                if (lista[i].equals(chave)) {
                    return true;
                }
            }
        } else {
            throw new ListaException("Lista nao inicializada !");
        }
        return false;
    }


    public void expandirLista(float percentual) throws IndexOutOfBoundsException {
        //Criar um novo vetor com o novo tamanho, e passar os elementos do anterior para esse.
        //Casos de adidionar um elemento em um indice especificado.

        /*if (qtdElementosArmazenados == tamanhoLista) {*/
        tamanhoLista = ((tamanhoLista * (int) percentual) / 100) + tamanhoLista;
        Object[] listaAuxiliar = new Object[tamanhoLista];
        for (int i = 0; i < qtdElementosArmazenados; i++) {
            listaAuxiliar[i] = lista[i];
        }
        lista = listaAuxiliar;
        /*}*/
    }

    @Override
    public String toString() {
        return "ListaSequencialNaoOrdenada{" +
                "lista=" + Arrays.toString(lista) +
                ", tamanhoLista=" + tamanhoLista +
                ", qtdElementosArmazenados=" + qtdElementosArmazenados +
                ", listaInicializada=" + listaInicializada +
                '}';
    }
}

Main test class:

public class Main {
public static void main(String[] args) throws ListaException {
    Pessoa p1 = new Pessoa("lucas",13);
    Pessoa p2 = new Pessoa("jose", 14);

    //System.out.println(p1.compareTo(p2));
    //System.out.println(p2.compareTo(p1));

    ListaSequencialNaoOrdenada lista = new ListaSequencialNaoOrdenada();
    lista.inicializar(10);
    //System.out.println(lista);
    lista.adicionar(p1);
    lista.adicionar(p2);
    System.out.println("===============================");
    System.out.println(lista.contem("123123"));
    lista.expandirLista(10);
    //System.out.println(lista);
    lista.expandirLista(10);
    //System.out.println(lista);

    //System.out.println(lista.contem(p1));
    lista.remover(p1);
   // System.out.println(lista);

}

}

    
asked by anonymous 26.04.2018 / 20:36

1 answer

0

Resolved

  @Override
public boolean equals(Object o) {
    if (o instanceof Pessoa) {
        return ((Pessoa) o).idade == this.idade;
    } else if (o != null) {
        //Parse no valor inteiro para Integer
        return new Integer(this.idade).equals(o);
    } else {
        return false;
    }
}
    
27.04.2018 / 00:43