Está en la página 1de 17

Java tiene desde la versin 1.2 todo un juego de clases e interfaces para guardar colecciones de objetos.

En l, todas las entidades conceptuales estn representadas por interfaces, y las clases se usan para proveer implementaciones de esas interfaces. Una introduccin conceptual debe entonces enfocarse primero en esas interfaces. La interfaz nos dice qu podemos hacer con un objeto. Un objeto que cumple determinada interfaz es algo con lo que puedo hacer X. La interfaz no es la descripcin entera del objeto, solamente un mnimo de funcionalidad con la que debe cumplir. Como corresponde a un lenguaje tan orientado a objetos, estas clases e interfaces estn estructuradas en una jerarqua. A medida que se va descendiendo a niveles ms especficos aumentan los requerimientos y lo que se le pide a ese objeto que sepa hacer.

La interfaz ms importante es Collection. Una Collection es todo aquello que se puede recorrer (o iterar) y de lo que se puede saber el tamao. Muchas otras clases extendern Collection imponiendo ms restricciones y dando ms funcionalidades. Es de notar que el requisito de que se sepa el tamao hace inconveniente utilizar estas clases con colecciones de objetos de las que no se sepa a priori la cantidad.
Por las dudas vuelvo a aclarar: No puedo construir una Collection. No se puede hacer new de una Collection, sino que todas las clases que realmente manejan colecciones son Collection.

Hay cuatro interfaces que extienden Collection: List, Set, Map y Queue. Cada una de ellas agrega condiciones sobre los datos que almacena y como contrapartida ofrece ms funcionalidad. A continuacin cuento de qu se trata cada una de ellas.

List Un List, o simplemente lista, es una Collection. La diferencia que tiene una lista con una Collection es que la lista mantiene un orden arbitrario de los elementos y permite acceder a los elementos por orden. Podramos decir que en una lista, por lo general, el orden es dato. Es decir, el orden es informacin importante que la lista tambin nos est almacenando. No hay ningn mtodo en Collection para obtener el tercer elemento. No lo puede haber porque, como se dijo, a nivel Collection ni siquiera estamos seguros de que si volvemos a recorrer la coleccin los elementos aparecern en el mismo orden. Una lista s debe permitir acceder al tercer elemento, por eso se aaden los siguientes mtodos:

LinkedList (lista enlazada) En sta, los elementos son mantenidos en una serie de nodos atados entre s como eslabones de una cadena. Cada uno de estos nodos apunta a su antecesor y al elemento que le sigue. No hay nada en cada uno de esos nodos que tenga algo que ver con la posicin en la lista. Para obtener el elemento nmero n, esta implementacin de List necesita entonces empezar desde el comienzo, desde el primer nodo, e ir avanzando al siguiente n veces. Buscar el elemento 400 entonces implica 400 de esos pasitos. La ventaja es que es posible eliminar elementos del principio de la lista y del medio de manera muy eficiente. Para eliminar un elemento solamente hay que modificar a sus dos vecinos para que se conecten entre s ignorando al elemento que se est borrando. Como en una cadena, se retira un eslabn abriendo los eslabones adyacentes al que se elimina y cerrndolos de modo que lo excluyan. No es necesario hacerle ningn cambio al resto de los elementos de la lista.
.
.

Set Es una Collection. Set es la palabra inglesa para conjunto y los desarrolladores de Java estaban pensando en lo que matemticamente se conoce como conjunto. Por sobre lo que es una collection, un set agrega una sola restriccin: No puede haber duplicados. Por lo general en un set el orden no es dato. Si bien es posible que existan sets que nos aseguren un orden determinado cuando los recorremos (por ejemplo obtener strings en orden alfabtico), ese orden no es arbitrario y decidido por nosotros, ya que la interfaz Set no tienen ninguna funcionalidad para manipularlo (como si lo admite la interfaz List). Como, a diferencia de Collection, el orden no necesariamente es preservado, no existen mtodos para obtener el primer elemento.

HashSet Existen varias implementaciones de Set. La ms comunmente usada es HashSet. Los Sets (y los Maps) aprovechan cierta cosa caracterstica de Java: Todos los objetos heredan de Object, por lo tanto todos los mtodos de la clase Object estn presentes en todos los objetos. Dicho de otra manera, hay ciertas cosas que todo objeto en Java sabe hacer. Dos de estas cosas son: Saber si es igual a otro, con su mtodo equals(). Devolver un nmero entero de modo tal que si dos objetos son iguales ese nmero tambin lo ser (se conoce esto como un hash). Esto todo objeto lo sabe hacer con su mtodo hashCode(). La clase HashSet aprovecha la segunda de las funciones. A cada objeto que se aade a la coleccin se le pide que calcule su hash. Este valor ser un nmero entre -2147483647 y 2147483648. Basado en ese valor se lo guarda en una tabla. Ms tarde, cuando se pregunta con contains() si un objeto x ya est, habr que saber si est en esa tabla. En qu posicin de la tabla est? HashSet puede saberlo, ya que para un objeto determinado, el hash siempre va a tener el mismo valor. Entonces la funcin contains de HashSet saca el hash del objeto que le pasan y va con eso a la tabla. En la posicin de la tabla hay una lista de objetos que tienen ese valor de hash, y si uno de esos es el buscado contains devuelve true.

TreeSet

TreeSet usa una tcnica completamente diferente a la explicada para HashSet. Construye un rbol con los objetos que se van agregando al conjunto. Un rbol es una forma en computacin de tener un conjunto de cosas todo el tiempo en orden, y permitir que se agreguen ms cosas y que el orden se mantenga.

Map Un Map representa lo que en otros lenguajes se conoce como diccionario y que se suele asociar a la idea de tabla hash (aunque no se implemente necesariamente con esa tcnica). Un Map es un conjunto de valores, con el detalle de que cada uno de estos valores tiene un objeto extra asociado. A los primeros se los llama claves o keys, ya que nos permiten acceder a los segundos. Cuando digo que las claves forman un conjunto, lo digo en el sentido Java: Son un Set, no puede haber duplicados. En otros lenguajes existen estructuras parecidas que admiten la existencia de claves duplicadas (a veces conocidos como multimap). La nica manera de lograr esto en Java es haciendo que el map guarde listas de valores en vez de los valores sueltos. Un Map no es una Collection ya que esa interfaz le queda demasiado chica. Podramos decir que Collection es unidimensional, mientras que un Map es bidimensional. No hay una manera trivial de expresar un Map en una simple serie de objetos que podemos recorrer. S podramos recorrer una serie de objetos si cada uno de ellos representase un par {clave, valor} (y de hecho eso se puede hacer). Pero esta forma de recorrer un Map no es la forma primaria en que se u

Queue y Deque Se conoce como cola a una coleccin especialmente diseada para ser usada como almacenamiento temporario de objetos a procesar. Las operaciones que suelen admitir las colas son encolar, obtener siguiente, etc. Por lo general las colas siguen un patrn que en computacin se conoce como FIFO (por la sigla en ingls de First In - First Out - lo que entra primero, sale primero), lo que no quiere decir otra cosa que lo obvio: El orden en que se van obteniendo los siguientes objetos coincide con el orden en que fueron introducidos en la cola. Esto anlogo a su tocaya del supermercado: La gente que hace la cola va siendo atendida en el orden en que lleg a sta.

Falta un ejemplo de Queue y Deque

También podría gustarte