Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre la coleccion algoritmos la cual mencionamos muy por arriba y una forma muy basica de resumirla es que se aplican a colecciones y mapas.

Anuncios

Los mismos son declarados como estaticos dentro la clase Collection, algunas excepciones que puede lanzar son ClassCastException cuando intente compara tipos incompatibles o UnsupportedOperationException cuando intenta modificar una coleccion inmodificable, a continuacion veremos algunos metodos disponibles por la coleccion Algoritmos:

Anuncios
  • static int binarySearch(List lista, Object valor, Comparator c), busca a valor en la lista ordenada de acuerdo a c, devuelve la posicion del valor en la lista o -1 en caso de no encontrarlo
  • static int binarySearch(List lista, Object valor), igual al metodo anterior pero en este caso debemos ordenar la lista.
  • static void copy(List lista1, List lista2), copia los elementos de la lista2 a la lista1
  • static Enumeration enumeration(Coleccion c), devuelve una enumeracion de c
  • static void fill(List lista, Object o), asigna a o a cada elemento de la lista
  • static int indexOfSubList(List lista, List subLista), busca lista para la primera ocurrencia en la subLista, devuelve el indice de la primer coincidencia o .1 cuando no es encontrado
  • static int lastIndexOfSubList(List lista, List subLista), busca lista para la ultima ocurrencia en la subLista, devuelve el indice de la ultima coincidencia o .1 cuando no es encontrado
  • static ArrayList list(Enumeration enum), devuelve un ArrayList que contiene los valores de enum
  • static Object max(Coleccion c, Comparator comp), devuelve el valor maximo en c determinado por comp
  • static Object max(Coleccion c), devuelve el valor maximo en c determinado por el orden natural y no necesita ser ordenado
  • static Object min(Coleccion c, Comparator comp), devuelve el valor minimo en c determinado por comp
  • static Object min(Coleccion c), devuelve el valor minimo en c determinado por el orden natural
  • static List nCopies(int num, Object o), devuelve un numero de copias informadas en num de o y contenidas en una lista inmutable, el valor de num debe ser mayor o igual a cero
  • static boolean replaceAll(List lista, Object viejo, Object nuevo), reemplaza todas las apariciones de viejo con nuevo en lista, si lo hizo aunque sea una vez devuelve verdadero de lo contrario devuelve falso
  • static void reverse(List lista), invierte la secuencia en la lista
  • static Comparator reverseOrder(), devuelve un comparador reverso
  • static void rotate(List lista, int n), rota la lista una n cantidad de veces a la derecha, para rotar a la izquierda n debe ser negativo
  • static void shuffle(List lista, Random r), ordena de forma al azar los elementos de la lista usando a r como origen de los numeros al azar
  • static void shuffle(List lista), ordena de forma al azar los elementos de la lista
  • static Set singleton(Object o), convierte al objeto como un set inmutable, esta es una forma sencilla de transformar un objeto en un conjunto (set)
  • static List singletonList(Object o), convierte al objeto en una lista inmutable, esta es una forma simple de transformar un objeto en una lista
  • static Map singletonMap(Object c, Object v), convierte al par clave (c)/ valor (v) en un mapa inmutable, es una forma sencilla de transformar el par clave/valor en un mapa
  • static void sort(List lista, Comparator comp), ordena los elementos de lista determinado por comp
  • static void sort(List lista), ordena los elementos de lista en su orden natural
  • static void swap(List lista, int inicio, int final) intercambia los elementos de lista en el rango indicado
  • static Collection synchronizedCollection(Coleccion c), devuelve una colección segura para subprocesos respaldada por c
  • static List synchronizedList(List lista), devuelve una lista segura para subprocesos respaldada por lista
  • static Map synchronizedMap(Map mapa), devuelve un mapa seguro para subprocesos respaldada por mapa
  • static Set synchronizedSet(Set s), devuelve un conjunto(set) seguro para subprocesos respaldada por s
  • static SortedMap synchronizedSortedMap(SortedMap mapa), devuelve un conjunto ordenado seguro para subprocesos respaldado por mapa
  • static SortedSet synchronizeSortedSet(SortedSet ss), Devuelve un conjunto ordenado seguro para subprocesos respaldada por ss
  • static Collection unmodifiableCollection(Coleccion c), devuelve una coleccion inmodificable respaldada por c
  • static List unmodifiableList(List lista), devuelve una lista inmodificable respaldada por lista
  • static Map unmodifiableMap(Map mapa), devuelve un mapa inmodificable respaldado por mapa
  • static Set unmodifiableSet(Set s), devuelve un conjunto inmodificable respaldado por s
  • static SortedSet unmodifiableSortedSep(SortedSet ss), devuelve un conjunto ordenado inmodificable respaldado por ss
  • static SortedMap unmodifiableSortedMap(SortedMap mapa), devuelve un mapa ordenado inmodificable respaldado por mapa
Anuncios

Para continuar veamos un ejemplo donde podremos poner en practica algunos de los metodos antes vistos:

DemoAlgoritmo.java

import java.util.*;

public class DemoAlgoritmo
{
        public static void main(String[] args)
        {
                LinkedList ll = new LinkedList();
                ll.add(new Integer(-8));
                ll.add(new Integer(20));
                ll.add(new Integer(-20));
                ll.add(new Integer(8));

                Comparator r = Collections.reverseOrder();

                Collections.sort(ll, r);

                Iterator li = ll.iterator();
                System.out.print("Lista ordenado en reversa: ");

                while(li.hasNext())
                {
                        System.out.print(li.next() + " ");
                }

                System.out.println();
                Collections.shuffle(ll);

                li = ll.iterator();
                System.out.print("Lista ordenada al azar: ");

                while(li.hasNext())
                {
                        System.out.print(li.next() + " ");
                }

                System.out.println();
                System.out.println("Minimo: " + Collections.min(ll));
                System.out.println("Maximo: " + Collections.max(ll));
        }
}
Anuncios

En este ejemplo primero crearemos un objeto de tipo LinkedList llamado ll, a este objeto le agregaremos cuatro numeros despues crearemos un comparador llamado r y el cual hara un orden de tipo inverso (reverseOrder), despues por medio de Collections.sort() ordenaremos a ll y gracias a r le diremos que lo ordene en forma inversa para poder mostrarlo primero crearemos un Iterator llamado li y luego por medio de un while y a traves de hasNext() iremos haciendo el ciclo y por medio de next() lo mostraremos en pantalla, despues por medio de Collections.shuffle() ordenaremos de forma al azar a ll, asignaremos un nuevo iterator a li y otra vez por medio de un while de forma similar al anterior nos mostrara los elementos de la misma, por ultimo mostraremos el valor minimo y valor maximo de nuestra lista, si lo compilamos y probamos obtendremos la siguiente salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java DemoAlgoritmo
Lista ordenado en reversa: 20 8 -8 -20
Lista ordenada al azar: -20 -8 8 20
Minimo: -20
Maximo: 20
tinchicus@dbn001vrt:~/programacion/java/codigo$
Anuncios

Observen como el programa hizo todo lo que solicitamos, primero lo ordeno en reversa, luego lo “randomizo” es decir lo ordeno de forma completamente al azar, por ultimo nos devolvio los valores minimos y maximos.

Anuncios

En resumen, hoy hemos visto la coleccion de algoritmos disponibles para nuestras colecciones, estas no aplican solo a colecciones sino tambien a mapas, hemos visto los metodos mas utilizados, hemos visto un ejemplo practico para entender el concepto de como utilizarlos, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00