Algoritmos y otras características especiales: Clases Collections y Arrays
La clase Collections (no confundir con la interface Collection, en singular) es una clase que define un buen número de métodos static con diversas finalidades. No se detallan o enumeran aquí porque exceden del espacio disponible. Los más interesantes son los siguientes:
Métodos que definen algoritmos:
Ordenación mediante el método mergesort
public static void sort(java.util.List);
public static void sort(java.util.List, java.util.Comparator);
Eliminación del orden de modo aleatorio
public static void shuffle(java.util.List);
public static void shuffle(java.util.List, java.util.Random);
Inversión del orden establecido
public static void reverse(java.util.List);
Búsqueda en una lista
public static int binarySearch(java.util.List, java.lang.Object);
public static int binarySearch(java.util.List, java.lang.Object, java.util.Comparator);
Copiar una lista o reemplazar todos los elementos con el elemento especificado
public static void copy(java.util.List, java.util.List); public static void fill(java.util.List, java.lang.Object);
Cálculo de máximos y mínimos
public static java.lang.Object max(java.util.Collection);
public static java.lang.Object max(java.util.Collection, java.util.Comparator); public static java.lang.Object min(java.util.Collection);
public static java.lang.Object min(java.util.Collection, java.util.Comparator);
Métodos de utilidad
Set inmutable de un único elemento
public static java.util.Set singleton(java.lang.Object);
Lista inmutable con n copias de un objeto
public static java.util.List nCopies(int, java.lang.Object);
Constantes para representar el conjunto y la lista vacía
public static final java.util.Set EMPTY_SET;
public static final java.util.List EMPTY_LIST;
Además, la clase Collections dispone de dos conjuntos de métodos “factory” que pueden ser utilizados para convertir objetos de distintas colecciones en objetos “read only” y para convertir distintas colecciones en objetos “synchronized” (por defecto las clases vistas anteriormente no están sincronizadas), lo cual quiere decir que se puede acceder a la colección desde distintas threads sin que se produzcan problemas. Los métodos correspondientes son los siguientes:
public static java.util.Collection synchronizedCollection(java.util.Collection); public static java.util.List synchronizedList(java.util.List);
public static java.util.Map synchronizedMap(java.util.Map); public static java.util.Set synchronizedSet(java.util.Set);
public static java.util.SortedMap synchronizedSortedMap(java.util.SortedMap); public static java.util.SortedSet synchronizedSortedSet(java.util.SortedSet);
public static java.util.Collection unmodifiableCollection(java.util.Collection); public static java.util.List unmodifiableList(java.util.List);
public static java.util.Map unmodifiableMap(java.util.Map); public static java.util.Set unmodifiableSet(java.util.Set);
public static java.util.SortedMap unmodifiableSortedMap(java.util.SortedMap); public static java.util.SortedSet unmodifiableSortedSet(java.util.SortedSet);
Estos métodos se utilizan de una forma muy sencilla: se les pasa como argumento una referencia a un objeto que no cumple la característica deseada y se obtiene como valor de retorno una referencia a un objeto que sí la cumple.
Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra