Collections - ArrayList

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]