Java: los algoritmos de colección
El marco de colecciones define varios algoritmos que se pueden aplicar a colecciones y mapas.
Estos algoritmos se definen como métodos estáticos dentro de la clase Colecciones. Varios de los métodos pueden arrojar unClassCastException, que ocurre cuando se intenta comparar tipos incompatibles, o un UnsupportedOperationException, que se produce cuando se intenta modificar una colección no modificable.
Los métodos definidos en el algoritmo del marco de recopilación se resumen en la siguiente tabla:
No Señor. | Método y descripción |
---|---|
1 | static int binarySearch(List list, Object value, Comparator c) Busca valor en la lista ordenada según c. Devuelve la posición del valor en la lista, o -1 si no se encuentra el valor. |
2 | static int binarySearch(List list, Object value) Busca valor en la lista. La lista debe estar ordenada. Devuelve la posición del valor en la lista, o -1 si no se encuentra el valor. |
3 | static void copy(List list1, List list2) Copia los elementos de list2 en list1. |
4 | static Enumeration enumeration(Collection c) Devuelve una enumeración sobre c. |
5 | static void fill(List list, Object obj) Asigna obj a cada elemento de la lista. |
6 | static int indexOfSubList(List list, List subList) Busca en la lista la primera aparición de subList. Devuelve el índice de la primera coincidencia, o .1 si no se encuentra ninguna coincidencia. |
7 | static int lastIndexOfSubList(List list, List subList) Busca en la lista la última aparición de subList. Devuelve el índice de la última coincidencia, o .1 si no se encuentra ninguna coincidencia. |
8 | static ArrayList list(Enumeration enum) Devuelve una ArrayList que contiene los elementos de enum. |
9 | static Object max(Collection c, Comparator comp) Devuelve el elemento máximo en c según lo determinado por comp. |
10 | static Object max(Collection c) Devuelve el elemento máximo en csegún lo determinado por el orden natural. No es necesario ordenar la colección. |
11 | static Object min(Collection c, Comparator comp) Devuelve el elemento mínimo en csegún lo determinado por comp. No es necesario ordenar la colección. |
12 | static Object min(Collection c) Devuelve el elemento mínimo en c según lo determinado por el orden natural. |
13 | static List nCopies(int num, Object obj) Devuelve el número de copias de obj contenidas en una lista inmutable. num debe ser mayor o igual a cero. |
14 | static boolean replaceAll(List list, Object old, Object new) Reemplaza todas las apariciones de antiguo por nuevo en la lista. Devuelve verdadero si ocurrió al menos un reemplazo. Devuelve falso, de lo contrario. |
15 | static void reverse(List list) Invierte la secuencia en la lista. |
dieciséis | static Comparator reverseOrder( ) Devuelve un comparador inverso. |
17 | static void rotate(List list, int n) Gira la lista por nlugares a la derecha. Para rotar a la izquierda, use un valor negativo paran. |
18 | static void shuffle(List list, Random r) Mezcla (es decir, aleatoriza) los elementos de la lista usando r como fuente de números aleatorios. |
19 | static void shuffle(List list) Mezcla (es decir, aleatoriza) los elementos de la lista. |
20 | static Set singleton(Object obj) Devuelve obj como un conjunto inmutable. Esta es una forma sencilla de convertir un solo objeto en un conjunto. |
21 | static List singletonList(Object obj) Devuelve obj como una lista inmutable. Esta es una forma sencilla de convertir un solo objeto en una lista. |
22 | static Map singletonMap(Object k, Object v) Devuelve el par clave / valor k / v como un mapa inmutable. Esta es una forma sencilla de convertir un único par clave / valor en un mapa. |
23 | static void sort(List list, Comparator comp) Ordena los elementos de la lista según lo determinado por comp. |
24 | static void sort(List list) Ordena los elementos de la lista según lo determinado por su orden natural. |
25 | static void swap(List list, int idx1, int idx2) Intercambia los elementos de la lista en los índices especificados por idx1 e idx2. |
26 | static Collection synchronizedCollection(Collection c) Devuelve una colección segura para subprocesos respaldada por c. |
27 | static List synchronizedList(List list) Devuelve una lista segura para subprocesos respaldada por lista. |
28 | static Map synchronizedMap(Map m) Devuelve un mapa seguro para subprocesos respaldado por m. |
29 | static Set synchronizedSet(Set s) Devuelve un conjunto seguro para subprocesos respaldado por s. |
30 | static SortedMap synchronizedSortedMap(SortedMap sm) Devuelve un conjunto ordenado seguro para subprocesos respaldado por sm. |
31 | static SortedSet synchronizedSortedSet(SortedSet ss) Devuelve un conjunto seguro para subprocesos respaldado por ss. |
32 | static Collection unmodifiableCollection(Collection c) Devuelve una colección no modificable respaldada por c. |
33 | static List unmodifiableList(List list) Devuelve una lista no modificable respaldada por la lista. |
34 | static Map unmodifiableMap(Map m) Devuelve un mapa no modificable respaldado por m. |
35 | static Set unmodifiableSet(Set s) Devuelve un conjunto no modificable respaldado por s. |
36 | static SortedMap unmodifiableSortedMap(SortedMap sm) Devuelve un mapa ordenado no modificable respaldado por sm. |
37 | static SortedSet unmodifiableSortedSet(SortedSet ss) Devuelve un conjunto ordenado no modificable respaldado por ss. |
Ejemplo
A continuación se muestra un ejemplo que demuestra varios 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));
}
}
Esto producirá el siguiente resultado:
Salida
List sorted in reverse: 20 8 -8 -20
List shuffled: 20 -20 8 -8
Minimum: -20
Maximum: 20