Equals e Comparable

O método equals é usado em uma classe para criar um critério de igualdade de dois ou mais objetos dessa classe. Esse critério pode ser feito por um atributo ou mais. Esse método é herdado da classe Object. Sem reprogramar esse método o critério de igualdade do Java é feito pela atribuição de um objeto com o outro. Fazendo isso o critério de igualdade é feito pela posição de memória dos objetos.

Apresentação nas Classes em Java

Apresentação das classes utilizando o método equals e criando o critério de igualdade pelo código.

package entity;

public class Pessoa {
	
	private Integer codigo;
	private String nome;
	
	public Pessoa() {
	}

	public Pessoa(Integer codigo, String nome) {
		super();
		this.codigo = codigo;
		this.nome = nome;
	}

	@Override
	public String toString() {
		return "Pessoa [codigo=" + codigo + ", nome=" + nome + "]";
	}
	
	@Override
	public boolean equals(Object obj) {
		Pessoa p = (Pessoa) obj; // Essa linha faz um conversão de Object para Pessoa.
		return this.codigo.equals(p.getCodigo()); // Criando o critério de igualdade
	}

	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}	
}    

Executando...

package main;

import entity.Pessoa;

public class Main {
	
	public static void main(String[] args) {
		
		Pessoa p = new Pessoa(1,"joao");
		Pessoa p1 = new Pessoa(1,"joao");
		
		// A resposta dessa comparação é true
		// Porque foi reprogramado o método equals
		System.out.println(p.equals(p1));		
	}
}    

Comparable

Interface Comparable é usada em uma classe para criar um critério de ordenação. Ao implementar essa interface tem que reprogramar o método compareTo. Nesse método é feito o critério podendo ser utilizando um atributo ou mais da classe.

package entity;

public class Pessoa implements Comparable {
	
	private Integer codigo;
	private String nome;
	
	public Pessoa() {
	}

	public Pessoa(Integer codigo, String nome) {
		super();
		this.codigo = codigo;
		this.nome = nome;
	}

	@Override
	public String toString() {
		return "Pessoa [codigo=" + codigo + ", nome=" + nome + "]";
	}
	
	@Override
	public boolean equals(Object obj) {
		Pessoa p = (Pessoa) obj; 
		return this.codigo.equals(p.getCodigo()); 
	}

	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	@Override
	public int compareTo(Pessoa obj) {
		// Utilizando a forma abaixo, a ordenação será crescente
		   return this.codigo.compareTo(((Pessoa)obj).getCodigo());
		// Utilizando a forma abaixo, a ordenação será decrescente
		// return (((Pessoa)obj).getCodigo()).compareTo(this.codigo);
	}	
}    
package main;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import entity.Pessoa;

public class Main {
	
	public static void main(String[] args) {
		
		Pessoa p1 = new Pessoa(2,"joao");
		Pessoa p2 = new Pessoa(1,"joao");
		Pessoa p3 = new Pessoa(3,"maria");
		
		// Criar uma lista de Pessoas
		List lista = new ArrayList();
		
		lista.add(p1);
		lista.add(p2);
		lista.add(p3);
		
		// Comando para ordenar a lista
		// pelo critério feito na classe pessoa
		Collections.sort(lista);
		
		System.out.println(lista);		
	}
}