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