Anda di halaman 1dari 5

Diferencias entre las colecciones List, Set y Map

Las colecciones son objetos que contienen objetos y que se usan para almacenar, obtener, manipular y comunicar datos incluidos en stas. Normalmente, los objetos includos en ellas suelen ser del mismo tipo, aunque no necesariamente, depende de si son o no genricas. Las colecciones se diferencian de los arrays en que su tamao no es fijo, esto es, son dinmicas. Se pueden realizar operaciones de incluir, eliminar, obtener, encontrar o recorrer una coleccin. La Java Collections Framework (JCF) est constituda por sus interfaces (las ms importantes List, Set y Map), interfaces de soporte (Iterator, ListIterator, Comparable y Comparator) y de clases de distintos usos, es decir, las implementaciones de las interfaces, y que sirven para almacenar y manipular grupos de datos como una sola unidad, como una coleccin (HashSet, TreeSet, ArrayList, LinkedList, HashMap, TreeMap, etc.). Tambin hay clases abstractas que tienen total o parcialmente implementados los mtodos de la interface correspondiente, y que sirven para que los usuarios deriven de ellas sus propias clases de forma ms sencilla.

Dos clases que implementan la misma interface se pueden utilizar exactamente de la misma forma, aunque difieran en cuanto a la implementacin y, por tanto, su eficiencia. Interfaces Comparable y Comparator Sirven para mantener ordenadas las listas, as como los sets y los maps que deban mantener un orden. Comparable declara el mtodo compareTo() que compara su argumento implcito por el que se le pasa por parmetro, devolviendo -1, 0 1 segn el argumento sea anterior, igual o posterior al objeto o: public int compareTo(Object o); Comparatorpermite ordenar listas y colecciones cuyos objetos pertenecen a clases de cualquier tipo. La idea es parecida a la de Comparable, pero el usuario debe proporcionar la implementacin de la interface. Esta interface declara los mtodos equals(), que compara dos Comparators, y compare(), que devuelve -1, 0 1 segn el argumento sea anterior, igual o posterior al segundo: public boolean equals(Object o); public int compare(Object o1, Object o2); INTERFACE LIST Se encarga de definir mtodos para trabajar con colacciones ordenadas y con elementos repetidos. Algunos de los mtodos de la interface List son los siguientes:
add(Object o): aade un objeto al final de la lista. add(int indice, Object o): aade un objeto a la lista en la posicin indicada. get(int indice): devuelve el objeto de la lista de la posicin indicada. remove(int indice): elimina el objeto de la lista pasado por parmetro. clear(): elimina todos los elementos de la lista. indexOf(Object o): devuelve la posicin de la primera vez que un elemento coincida con el objeto pasado por parmetro. Si el elemento no se encuentra devuelve -1. lastIndexOf(Object o):devuelve la posicin de la ltima vez que un elemento coincida con el objeto pasado por parmetro. Si el elemento no se encuentra devuelve -1. size(): devuelve el nmero de elementos de la lista. contains(Object o): devuelve verdadero si en la lista aparece el objeto pasado por parmetro, para lo cual utiliza intrnsecamente el mtodo equals().

Existen implementaciones de la interface List, como son las clases ArrayList y LinkedList. Hay otras dos que no voy a comentar: Vector(h) y Stack(h).

ArrayList se basa en ndices, siendo cero la posicin inicial e infinito su posicin final, o lo que es lo mismo, contiene tantos objetos como necesitemos, almacenando los elementos en un array de objetos. Esta clase tiene varios constructores, siendo la ms importante el ArrayList(), que construye un ArrayList con capacidad cero por defecto pero con infinitos objectos a insertar. Si le queremos dar un tamao empleamos el constructor ArrayList(int numElementos). ArrayList implementa la interfaz List y extiende de la clase abstracta AbstractList. LinkedList almacena los elementos en una lista vinculada y permiten un acceso a ella de manera secuencial, pero su uso no es tan eficiente como los arrays. INTERFACES SET<E> y SORTEDSET<E> Sirve para acceder a una coleccin sin elementos repetidos (hay que saber cundo dos objetos son considerados iguales; para ello se usan equals() y hashcode();). Puede estar o no ordenada, y no declara ningn mtodo adicional a los de Collection. Algunos de los mtodos de la interface Set son los siguientes:

add(Object o): aade el objeto pasado por parmetro al Set siempre que ste no exista ya, y devuelve un booleano. clear(): Elimina a todos los elementos del Set. contains(Object o): devuelve true si el Set contiene el objeto pasado por parmetro. Para ello, se compara de forma interna con el mtodo equals (o.equals(x);) o con el mtodo hashCode(). isEmpty(): devuelve true si el Set est vaco. iterator(): devuelve un iterador remove(Object o): elimina el objeto pasado por parmetro si existe y devuelve un booleano. size(): devuelve un entero que es el nmero de elementos del Set.

La interface SortedSet extiende de la interface Set y aade una serie de mtodos, entre los que hay que destacar:

comparator(): obtiene el objeto pasado al constructor para establecer el orden; si se emplea el orden natural definido por la interface Comparable, devuelve null; first() / last(): devuelve el primer o el ltimo elemento del conjunto.

Existen dos implementaciones de conjuntos, como son la clase HashSet y la clase TreeSet. HashSet<Elemento> Implementa la inteface Set y est basada en una hash table. Hace distincin de identidad, esto es, que slo pueden existir elementos diferentes (nada de duplicados). No se respeta el orden en el que se insertan los elementos y el tamao del conjunto se adapta dinmicamente a lo que se necesite. HashSet implementa la interfaz Set y extiende de la clase abstracta AbstractSet.

INTERFACES MAP<Clave, Valor> y SORTEDMAP<Clave, Valor> Un Map es una estructura de datos agrupados en parejas clave/valor; pueden ser considerados como una tabla de dos columnas. La clave debe ser nica y se emplea para acceder al valor. Map no deriva de Collection, pero s se pueden ver los Maps como colecciones de claves, de valores o de claves/valores. Algunos de los mtodos de la interface Map son los siguientes:

clear(): elimina todos los mapeos del Map. containsKey(Object clave): devuelve true si el Map contiene un mapeo igual que el objeto pasado por parmetro: boolean existe = productos.containsKey(producto); containsValue(Object valor): devuelve true si el Map mapea a uno o ms claves del objeto valor pasado por parmetro. get(Object clave): devuelve el objeto valor de la clave pasada por parmetro; o null si el Map no encuentra ningn mapeo con esta clave. isEmpty(): devuelve true si el Map est vaco. put(Clave clave, Valor valor): asigna el valor pasado con la clave especificada a otro objeto valor. remove(Object clave): elimina el mapeo que tenga la clave pasada por parmetro si existe, devolviendo el valor de dicho mapeo. size(): devuelve un entero con el nmero de mapeos del Map.

La interface SortedMap aade mtodos similares a los de SortedSet. Existen tres implementaciones como son las clases HashMap, HashTable(h) y TreeMap. HashMap<Clave,Valor> esta clase mapea claves con valores, pero no permite claves duplicadas porque se solapara el valor. Tanto la clave como el valor pueden ser cualquier tipo de objeto, y ambos pueden tener el valor null. Esta clase no garantiza el orden de los elementos ni que no puedan cambiar de orden. HashMap implementa la interfaz Map y extiende de la clase abstracta AbstractMap. Esta clase posee internamente (de la clase AbstractMap) los mtodos equals, hashCode y toString. HashTable<Clave,Valor> Es una clase que implementa Map y que almacena pares del tipo clave/valor en una tabla de dispersin. Al emplearla se proporciona un objeto que sirve como clave y otro como valor (vinculando el valor a la clave).Su insercion y bsqueda es rpida. Un ejemplo sera un listn de telfonos, en el que dado un nombre se proporciona un telfono. TreeMap<Clave,Valor> Esta clase implementa SortedMap y se basa en una rbol binario.