|
|
Daniel Destro
Utilizando a classe java.util.Arrays, como alternativa a criação de uma Collection apenas para ordenar uma array.
Introdução
Quando estamos manipulando estruturas de dados em aplicativos, uma das necessidade frequentemente encontradas é a de ordenar objetos de acordo com algum critério.
Existem muitos métodos de implementação de algorítmos de ordenação, como o Bubble Sorte, Quick Sort e muitos outros, cada um suas peculiaridades e (des)vantagens.
Java felizmente nos proporciona métodos para ordenar arrays sem que tenhamos que implementar esses algoritmos.
Uma forma muito comum de fazer isso, é criar alguma coleção, como a java.util.TreeSet, e ir inserindo os elementos nela, já que ela vai se ajeitando de maneira ordenada (árvores binárias). Poucas pessoas sabem que este método é muito mais devagar do que utilizar uma classe especial do java.
java.util.Arrays
A classe java.util.Arrays possui uma série de métodos estáticos, e entre eles, provê o método sort() que ordena qualquer array passada, dado um mecanismo de comparação.
Veja no exemplo, como ordenar uma array de Strings:
01 import java.util.*;
02
03 public class TesteOrdenacao {
04
05 public static void main( String args[] ) {
06 String[] nomes = { "Daniel", "Paulo", "Rafael", "Guilherme", "Jonas", "Augusto", "Anderson" };
07 listar(nomes);
08
09 Arrays.sort( nomes,
10 new Comparator() {
11 public int compare( Object obj1, Object obj2 ) {
12 return ((String)obj1).compareTo((String)obj2);
13 }
14 }
15 );
16
17 listar( nomes );
18 }
19
20 static void listar( String[] lista ) {
21 for(int i=0; i<lista.length; i++) {
22 System.out.println( lista[i] );
23 }
24 }
25 }
|
No exemplo acima criamos uma array de nomes desordenados e listamos na saída padrão. Logo em seguida utilizamos a ordenação do array de strings de nomes e mandamos listar novamente.
Quando fizemos a ordenação (Arrays.sort), passamos como parâmetros o array de nomes a serem ordenados e como segundo parâmetro passamos a instância de uma implementação da interface Comparator. O modo como foi declarado e passado a instância da implementação de Comparator é chamado de Annonymous Inner Class. Isso é útil quando essa implementação ver usada em apenas um local, não sendo necessário reutilizar essa implementação em um outro ponto da aplicação.
O seu método de comparação pode ser implementado de qualquer maneira, satisfazendo as suas necessidades.
Existe ainda uma sobrecarga deste método, que você não precisa passar o segundo argumento. Mas é necessário que os objetos do seu array implementem a interface java.lang.Comparable.
Então, você poderia ter usado a chamada de método simplesmente assim:
Isso porque a classe java.lang.String já implementa a Comparable.
A classe java.util.Array ainda possui uma série de outros métodos para busca, preenchimento de arrays e outras funcionalidades.
|
|
|