sábado, 31 de diciembre de 2011

Colecciones

votar
   Cuando en un lenguaje de programación es necesario tratar con un conjunto de datos, como por ejemplo el número de ventas realizadas, o el stock de un almacén, se emplean colecciones. En Java, las colecciones utilizan el marco de trabajo Java Collections Framework. Dentro de este marco, existen una serie de interfaces y clases diseñadas para tratar específicamente con conjuntos de datos. Si se te escapa el concepto de interfaz, puedes consultar la entrada correspondiente.

   Este marco esta ordenado de forma jerárquica. Primero está la interfaz Collection (no confundir con la clase Collections, en plural) a la que extienden las interfaces Set, List y Queue. A su vez, de estas interfaces parten otras interfaces y clases que tratan los datos de forma diferente según las necesidades de los mismos.
   Por otro lado tenemos la interfaz Map. Map forma parte del Java Collection Framework pero no tiene nada que ver con Collection. Más tarde volveremos con esta interfaz.

   Vayamos por ahora con Collection. Una colección es simplemente un grupo de objetos a los que llamamos elementos. Hay que tener en cuenta que las colecciones usan Genéricos, es decir, hay que declarar qué tipo de elementos los componen. Así, para declarar la interfaz Collection haríamos lo siguiente:
public interface Collection<E>
siendo E el nombre de los objetos de que está formada la colección. Por ejemplo, Collection<String>, o Collection<Integer>.

   Collection se usa cuando no hay que ser muy específico sobre cómo tratar los datos, y nos llega con los métodos que tiene esta interfaz. Cuando esto no es suficiente, usamos las interfaces que extienden Collection:
  • Set: es una colección que no puede contener elementos duplicados, como entradas de cine o nombres de clientes. Estos elementos pueden estar ordenados o no. La extiende la interfaz SortedSet, que tiene sus elementos ordenados, y la implementan tres clases
                 -HashSet: los elementos no están ordenados.
                 -TreeSet: los elementos están ordenados según un orden natural (de menor a mayor, lexicográficamente...) o según las reglas de comparación que provea el programador.
                  -LinkedHashSet: los elementos están colocados por el orden en que son insertados.
  • List: es una colección ordenada y que permite duplicados, por ejemplo, los libros vendidos en una semana. ArrayList, Vector y LinkedList son las tres clases que implementan List. Las tres tienen sus elementos ordenados según su índice.
  • Queue: es una colección que sirve para mantener los elementos antes de procesarlos. Normalmente, pero no siempre, los elementos están ordenados según el sistema FIFO (first-in-first-out), es decir, el primero en entrar es el primero en salir. PriorityQueue es una clase que implementa Queue y que ordena los elementos según su orden de prioridad.
   Volvamos ahora con la interfaz Map. Map es utilizado cuando tenemos un conjunto de valores y a cada uno de ellos le asignamos una clave. Por ejemplo, el nombre y el DNI, o el nombre de usuario y la contraseña. Un Map no puede contener claves duplicadas y cada clave referencia a un sólo valor (existen los multimaps, cuyas claves pueden referenciar a varios, pero ése es otro tema). Hashtable, TreeMap y HashMap son tres clases que implementan Map. De ellas, sólo TreeMap está ordenada según un orden natural o por las reglas de comparación dadas. Map también tiene una interfaz que la extiende: SortedMap (en realidad, TreeMap implementa NavigableMap, que extiende SortedMap, que extiende Map).

   Hay por último dos clases, Arrays y Collections, que extienden la clase Object, y que contienen un grupo de métodos útiles para usar con las colecciones. Puedes encontrar todos los métodos usados en estas clases e interfaces en los docs de Oracle.

  


5 comentarios:

  1. El link http://www.javaparanulos.com/Tutorial/colecciones.html no existe. ¿Podrías ponerlo en online? Los temas los explicas muy bien. =) Saludos

    ResponderEliminar
  2. ¡Uy! Me olvidé de quitar el link. Es que esta entrada ya tiene un par de años.

    Lo siento Anónimo, el enlace corresponde a una antigua página mía que ya no existe, porque la veía tan poca gente, que no me compensaba seguir pagando el hosting.

    Por eso empecé el blog, que me sale gratis. ;-) ¡Lo malo es que ahora que no tengo tiempo para escribir en él, es cuando está recibiendo más visitas!

    No sé si aún tengo por ahí los archivos de la página. Si los encuentro, pongo online el que te interesa (actualizado).

    ¡Muchas gracias por tu comentario y por leerme!

    (Ya eliminé el enlace)

    ResponderEliminar
  3. No te preocupes, seguiré visitando tu blogs para los demas temas disponibles, me gusta como explicas con cosas triviales de la vida real, asi le entiendo mejor. Gracias de todas formas, saludos.

    ResponderEliminar
  4. Muy bueno tu blog. Útil, con buenos ejemplos e intuitivo. Te felicito! Saludos desde Argentina!

    ResponderEliminar
    Respuestas
    1. ¡Muchas gracias, Matías! ¡Un fuerte abrazo desde Galicia!

      Eliminar