Hum… agora vi: a comparação que dá para fazer usando diretamente “equals” só serve se os arraylists forem exatamente iguais. Se os dados forem iguais, mas em sequência diferente, então não dá para usar “equals”.
Nesse caso, você pode ordenar os dois arraylists, e a seguir comparar.
Mas o que você quer saber, na verdade, não é algo tão básico como “saber se são iguais ou diferentes”. Você quer uma lista de diferenças; nesse caso, depende um pouco de seus dados. Você pode, em vez de usar um ArrayList, usar um TreeSet, e usar o método removeAll ou retainAll. Rode o programa abaixo e veja o que você quer dizer por “diferença”. (Talvez seja a diferença simples entre conjuntos, e talvez seja a diferença simétrica.)
import java.util.*;
class Cliente {
private int id;
private String nome;
private String endereco;
public int getId() { return id; } public void setId (int id_) { id = id_; }
public String getNome() { return nome; } public void setNome (String nome_) { nome = nome_; }
public String getEndereco() { return endereco; } public void setEndereco (String endereco_) { endereco = endereco_; }
public Cliente (String nome_, String endereco_, int id_) { id = id_; nome = nome_; endereco = endereco_; }
public String toString () { return "id=" + id + ",nome=" + nome + ",endereco=" + endereco; }
}
class ClienteComparator implements Comparator<Cliente> {
public int compare (Cliente c1, Cliente c2) {
if (c1.getId() != c2.getId()) return c1.getId() - c2.getId();
int ret = c1.getNome().compareTo (c2.getNome());
if (ret != 0) return ret;
ret = c1.getEndereco().compareTo (c2.getEndereco());
return ret;
}
}
class TesteTreeSet {
// Retorna uma lista dos clientes que estão em clientes1 mas não estão em clientes2
public static Set<Cliente> diferenca (Set<Cliente> clientes1, Set<Cliente> clientes2) {
Set<Cliente> ret = new TreeSet<Cliente>(new ClienteComparator());
ret.addAll (clientes1);
ret.removeAll (clientes2);
return ret;
}
// Retorna a união das listas clientes1 e clientes2
public static Set<Cliente> uniao (Set<Cliente> clientes1, Set<Cliente> clientes2) {
Set<Cliente> ret = new TreeSet<Cliente>(new ClienteComparator());
ret.addAll (clientes1);
ret.addAll (clientes2);
return ret;
}
// Retorna uma lista de clientes que estão em clientes1 mas não estão em clientes2,
// juntamente com uma lista de clientes que estão em cliente2 mas não estão em clientes1
public static Set<Cliente> diferencaSimetrica (Set<Cliente> clientes1, Set<Cliente> clientes2) {
Set<Cliente> dif1 = diferenca (clientes1, clientes2);
Set<Cliente> dif2 = diferenca (clientes2, clientes1);
return uniao (dif1, dif2);
}
// Retorna a intersecção das listas clientes1 e clientes2
// (ou seja, os clientes que estão em ambas as listas
public static Set<Cliente> interseccao (Set<Cliente> clientes1, Set<Cliente> clientes2) {
Set<Cliente> ret = new TreeSet<Cliente>(new ClienteComparator());
ret.addAll (clientes1);
ret.retainAll (clientes2);
return ret;
}
public static void main(String[] args) {
TreeSet<Cliente> clientes1 = new TreeSet<Cliente>(new ClienteComparator());
TreeSet<Cliente> clientes2 = new TreeSet<Cliente>(new ClienteComparator());
clientes1.add (new Cliente ("Jose Aparecido", "R. dos Bobos, 0", 7));
clientes1.add (new Cliente ("Maria Isabel", "Av. America, 200", 13));
clientes1.add (new Cliente ("Jesus Madonna", "Beverly Hills, 92010", 17));
clientes2.add (new Cliente ("Marisa Morro", "Palacio do Crepusculo, 20", 22));
clientes2.add (new Cliente ("Maria Isabel", "Av. America, 200", 13));
clientes2.add (new Cliente ("Jesus Madonna", "Beverly Hills, 92010", 17));
clientes2.add (new Cliente ("Andersen Clayton", "Comunidade da Fazendinha, barraco 777", 99));
System.out.println ("-- Diferenca clientes1 - clientes2 --");
System.out.println (diferenca (clientes1, clientes2));
System.out.println ("-- Diferenca clientes2 - clientes1 --");
System.out.println (diferenca (clientes2, clientes1));
System.out.println ("-- Uniao clientes1 U clientes2 --");
System.out.println (uniao (clientes1, clientes2));
System.out.println ("-- Diferenca Simetrica clientes1 & clientes2 --");
System.out.println (diferencaSimetrica (clientes1, clientes2));
System.out.println ("-- Interseccao clientes1 ^ clientes2 --");
System.out.println (interseccao (clientes1, clientes2));
}
}