List (ArrayList) sabem a posição do índice e permitem duplicata.
Ordenando
Esta rotina abaixo funciona para ordenar strings
ArrayList lista = new ArrayList();
lista.add(new String("Maria"));
lista.add(new String("Ana"));
lista.add(new String("Flavia"));
Collections.sort(lista);
System.out.println(lista);
Saída: [Ana, Flavia, Maria]
Ordenando um objeto
public class Cat {
private String nome;
private int idade;
public Cat(String anome, int aidade) {
nome = anome;
idade = aidade;
}
public String toString() {
return nome;
}
}
Esse código abaixo não funciona (por causa dos tipos genéricos):
ArrayList<Cat> lista = new ArrayList<Cat>();
lista.add(new Cat("Mimi", 1));
lista.add(new Cat("Chip", 2));
lista.add(new Cat("Aio",3));
Collections.sort(lista); // o sort exige que o objeto implemente Comparable
System.out.println(lista);
Vamos arrumar implementando a interface Comparable
public class Cat implements Comparable<Cat> { // implemente Comparable
private String nome;
private int idade;
public Cat(String anome, int aidade) {
nome = anome;
idade = aidade;
}
public String getNome() {
return nome;
}
public int getIdade() {
return idade;
}
public String toString() {
return nome;
}
public int compareTo(Cat another) { // aqui tá o segredo
return nome.compareTo(another.getNome());
}
}
// agora funciona!
Ordenando com um Comparator
Se quisermos ordernar por idade e depois por nome?
Implemente o comparator
Nova classe Cat
public class Cat {
private String nome;
private int idade;
public Cat(String anome, int aidade) {
nome = anome;
idade = aidade;
}
public String getNome() {
return nome;
}
public int getIdade() {
return idade;
}
public String toString() {
return nome;
}
}
Comparador 1 - por idade
import java.util.Comparator;
public class CatIdade implements Comparator<Cat> {
public int compare(Cat um, Cat dois) {
return um.getIdade() - dois.getIdade();
}
}
Comparador 2 - por nome
import java.util.Comparator;
public class CatNome implements Comparator<Cat> {
public int compare(Cat um, Cat dois) {
return um.getNome().compareTo(dois.getNome());
}
}
Programa final
import java.util.ArrayList;
import java.util.Collections;
public class Teste {
public static void main(String[] args) {
ArrayList<Cat> lista = new ArrayList<Cat>();
lista.add(new Cat("Mimi", 1));
lista.add(new Cat("Chip", 2));
lista.add(new Cat("Aio",3));
Collections.sort(lista, new CatIdade());
System.out.println(lista);
Collections.sort(lista, new CatNome());
System.out.println(lista);
}
}
Saída
[Mimi, Chip, Aio]
[Aio, Chip, Mimi]