Capítulo 11 Ordenação e pesquisa com java.Arrays

Propaganda
Capítulo 11
Ordenação e pesquisa com java.Arrays
Métodos sort e binarySearch da classe utilitária java.Arrays
Ordenação de objectos baseada no método Comparable
Ordenação
• A classe utilitária Arrays do Java disponibiliza o método estático de
ordenação sort, com implementação baseada no algoritmo de ordenação
Quicksort
import java.util.Arrays;
• A ordenação é feita de acordo com a ordem natural ascendente dos seus
elementos. Por exemplo:
int[] va = {9, 12, 3, 5, 1, 16} ;
Arrays.sort(va);
{ 1, 3, 5, 9, 12, 16 }
int[] vb = {19, 2, 3, 25, 1, 16, 43, 23} ;
// ordenação do índice 2 ao índice 6
Arrays.sort(vb, 2, 6);
{ 19, 2, 1, 3, 16, 25, 43, 23 }
Introdução à Programação
2007/08
A. Lopes
Pesquisa num vector ordenado
• A classe utilitária Arrays do Java disponibiliza o método estático
binarySearch para pesquisa de elementos. A sua utilização pressupõe que
o vector esteja ordenado. O método devolve:
• o índice do elemento, se foi encontrado
• ou -k-1, em que k é a posição onde deveria estar o elemento. Assim
sendo, obtém-se sempre um resultado negativo neste caso
int[] va = { 1, 4, 9 };
int value = 7;
int pos = Arrays.binarySearch(va, value);
// devolve -3; value deveria estar antes da posição 2
• No caso de repetição no vector do elemento a pesquisar, o valor a devolver
pode ser qualquer um dos índices válidos
Introdução à Programação
2007/08
A. Lopes
Ordenação de objectos
• O método Arrays.sort também permite a ordenação de objectos de
classes com um método compareTo, i.e. que implementam a interface
Comparable
public interface Comparable
{
int compareTo( Object otherObject );
}
• Uma chamada do tipo a.compareTo(b) devolve (relembrar o caso de
strings)
• um número negativo se a deve ser apresentado antes de b
• 0 se a e b são iguais
• um número positivo caso contrário
Introdução à Programação
2007/08
A. Lopes
Ordenação de objectos
• Existem várias classes Java que implementam Comparable. Por exemplo,
as classes String e Date. O programador pode também implementar a
interface Comparable para as suas próprias classes, de modo a possibilitar
a utilização posterior do método Arrays.sort
public class Coin implements Comparable {
...
public int compareTo(Object otherObject) {
Coin other = (Coin) otherObject;
if (value < other.value) return -1;
if (value == other.value) return 0;
return 1;
}
...
Coin[]
coins = new Coin[n];
}
// adiciona moedas
...
Arrays.sort(coins);
Introdução à Programação
2007/08
Coin
compareTo()
<<interface>>
Comparable
A. Lopes
Download