Ordenando arrays

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 mainString args[] ) {
06         String[] nomes = "Daniel""Paulo""Rafael""Guilherme""Jonas""Augusto""Anderson" };
07         listar(nomes);
08 
09         Arrays.sortnomes,
10             new Comparator() {
11                 public int compareObject obj1, Object obj2 ) {
12                     return ((String)obj1).compareTo((String)obj2);
13                 }
14             }
15         );
16 
17         listarnomes );
18     }
19   
20     static void listarString[] lista ) {
21         for(int i=0; i<lista.length; i++) {
22             System.out.printlnlista[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:

1     Arrays.sort(nomes);


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.


Copyright © 2002-2006 GUJ | Todas as marcas e marcas registradas que aparecem no GUJ são de propriedade de seus respectivos donos