Java - Os algoritmos de coleção
A estrutura de coleções define vários algoritmos que podem ser aplicados a coleções e mapas.
Esses algoritmos são definidos como métodos estáticos dentro da classe Collections. Vários dos métodos podem lançar umClassCastException, que ocorre quando é feita uma tentativa de comparar tipos incompatíveis, ou um UnsupportedOperationException, que ocorre quando é feita uma tentativa de modificar uma coleção não modificável.
Os métodos definidos no algoritmo da estrutura de coleta são resumidos na tabela a seguir -
| Sr. Não. | Método e Descrição |
|---|---|
| 1 | static int binarySearch(List list, Object value, Comparator c) Pesquisa por valor na lista ordenada de acordo com c. Retorna a posição do valor na lista ou -1 se o valor não for encontrado. |
| 2 | static int binarySearch(List list, Object value) Pesquisa um valor na lista. A lista deve ser classificada. Retorna a posição do valor na lista ou -1 se o valor não for encontrado. |
| 3 | static void copy(List list1, List list2) Copia os elementos de lista2 para lista1. |
| 4 | static Enumeration enumeration(Collection c) Retorna uma enumeração sobre c. |
| 5 | static void fill(List list, Object obj) Atribui obj a cada elemento da lista. |
| 6 | static int indexOfSubList(List list, List subList) Pesquisa na lista a primeira ocorrência de subList. Retorna o índice da primeira correspondência ou .1 se nenhuma correspondência for encontrada. |
| 7 | static int lastIndexOfSubList(List list, List subList) Pesquisa na lista a última ocorrência de subList. Retorna o índice da última correspondência ou .1 se nenhuma correspondência for encontrada. |
| 8 | static ArrayList list(Enumeration enum) Retorna um ArrayList que contém os elementos de enum. |
| 9 | static Object max(Collection c, Comparator comp) Retorna o elemento máximo em c conforme determinado por comp. |
| 10 | static Object max(Collection c) Retorna o elemento máximo em cconforme determinado pela ordenação natural. A coleção não precisa ser classificada. |
| 11 | static Object min(Collection c, Comparator comp) Retorna o elemento mínimo em cconforme determinado por comp. A coleção não precisa ser classificada. |
| 12 | static Object min(Collection c) Retorna o elemento mínimo em c conforme determinado pela ordenação natural. |
| 13 | static List nCopies(int num, Object obj) Retorna núm cópias de obj contido em uma lista imutável. num deve ser maior ou igual a zero. |
| 14 | static boolean replaceAll(List list, Object old, Object new) Substitui todas as ocorrências antigas por novas na lista. Retorna verdadeiro se pelo menos uma substituição ocorreu. Retorna falso, caso contrário. |
| 15 | static void reverse(List list) Inverte a sequência na lista. |
| 16 | static Comparator reverseOrder( ) Retorna um comparador reverso. |
| 17 | static void rotate(List list, int n) Gira a lista por nlugares à direita. Para girar para a esquerda, use um valor negativo paran. |
| 18 | static void shuffle(List list, Random r) Embaralha (ou seja, randomiza) os elementos da lista usando r como fonte de números aleatórios. |
| 19 | static void shuffle(List list) Embaralha (ou seja, randomiza) os elementos da lista. |
| 20 | static Set singleton(Object obj) Retorna obj como um conjunto imutável. Esta é uma maneira fácil de converter um único objeto em um conjunto. |
| 21 | static List singletonList(Object obj) Retorna obj como uma lista imutável. Esta é uma maneira fácil de converter um único objeto em uma lista. |
| 22 | static Map singletonMap(Object k, Object v) Retorna o par chave / valor k / v como um mapa imutável. Esta é uma maneira fácil de converter um único par de chave / valor em um mapa. |
| 23 | static void sort(List list, Comparator comp) Classifica os elementos da lista conforme determinado por comp. |
| 24 | static void sort(List list) Classifica os elementos da lista conforme determinado por sua ordem natural. |
| 25 | static void swap(List list, int idx1, int idx2) Troca os elementos da lista pelos índices especificados por idx1 e idx2. |
| 26 | static Collection synchronizedCollection(Collection c) Retorna uma coleção thread-safe apoiada por c. |
| 27 | static List synchronizedList(List list) Retorna uma lista thread-safe apoiada por list. |
| 28 | static Map synchronizedMap(Map m) Retorna um mapa thread-safe apoiado por m. |
| 29 | static Set synchronizedSet(Set s) Retorna um conjunto thread-safe apoiado por s. |
| 30 | static SortedMap synchronizedSortedMap(SortedMap sm) Retorna um conjunto classificado thread-safe apoiado por sm. |
| 31 | static SortedSet synchronizedSortedSet(SortedSet ss) Retorna um conjunto thread-safe apoiado por ss. |
| 32 | static Collection unmodifiableCollection(Collection c) Retorna uma coleção não modificável apoiada por c. |
| 33 | static List unmodifiableList(List list) Retorna uma lista não modificável apoiada pela lista. |
| 34 | static Map unmodifiableMap(Map m) Retorna um mapa não modificável apoiado por m. |
| 35 | static Set unmodifiableSet(Set s) Retorna um conjunto inalterável apoiado por s. |
| 36 | static SortedMap unmodifiableSortedMap(SortedMap sm) Retorna um mapa classificado não modificável apoiado por sm. |
| 37 | static SortedSet unmodifiableSortedSet(SortedSet ss) Retorna um conjunto classificado não modificável apoiado por ss. |
Exemplo
A seguir está um exemplo, que demonstra vários algoritmos.
import java.util.*;
public class AlgorithmsDemo {
public static void main(String args[]) {
// Create and initialize linked list
LinkedList ll = new LinkedList();
ll.add(new Integer(-8));
ll.add(new Integer(20));
ll.add(new Integer(-20));
ll.add(new Integer(8));
// Create a reverse order comparator
Comparator r = Collections.reverseOrder();
// Sort list by using the comparator
Collections.sort(ll, r);
// Get iterator
Iterator li = ll.iterator();
System.out.print("List sorted in reverse: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
Collections.shuffle(ll);
// display randomized list
li = ll.iterator();
System.out.print("List shuffled: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
System.out.println("Minimum: " + Collections.min(ll));
System.out.println("Maximum: " + Collections.max(ll));
}
}
Isso produzirá o seguinte resultado -
Resultado
List sorted in reverse: 20 8 -8 -20
List shuffled: 20 -20 8 -8
Minimum: -20
Maximum: 20