You are on page 1of 28

Colecciones

Curso: Tpicos I Docente: Ing. Mendoza Corpus Carlos.


CLASE 06

Colecciones en Java.

Los lenguajes de programacin proporcionan utilidades que permiten al desarrollador crear estructuras de datos.

Java posee el API Collections, que proporcionan varias abstracciones para conjuntos (Set), listas (List), tablas hash (Map), etc.
Se introdujo con la Java2SE (versin 1.2 de Java Standard Edition)

Objetivo: proporcionar clases, interfaces y algoritmos para utilizar las estructuras de una manera estndar.
2

Base del API Collections de Java


Interface Collection Map

List

Set

SortedMap

SortedSet

Conjunto de interfaces que forman la base del API Collections.


3

API Collections de Java

La jerarqua tiene dos races: Collection: trabaja sobre conjuntos singulares. Map: trabaja sobre pares de valores.

de

elementos

Todas las clases que pertenecen a la jerarqua Collection utilizan mtodos comunes para gestionar los elementos que se guardan. Una caracterstica que conviene destacar de estas clases es que solamente permiten almacenar objetos, por lo que no se pueden almacenar directamente variables de tipos primitivos.
4

Interfaz Collection

boolean add(Object element): Permite aadir un objeto a la coleccin de datos. boolean remove(Object element): Elimina un objeto de la lista. Si el elemento aparece ms de una vez, solamente se borrar una de las apariciones. int size(): Devuelve el nmero de elementos que hay almacenados en la coleccin. boolean isEmpty(): Devuelve true si la coleccin no tiene ningn elemento. boolean contains(Object element): Devuelve true si el objeto est en la coleccin, y false en caso contrario.
5

Interfaz Collection

Iterator iterator(): Devuelve un objeto iterator, que permite recorrer los elementos de la coleccin. boolean containsAll(Collection collection): Devuelve true si la coleccin contiene todos los elementos de la coleccin collection. boolean addAll(Collection collection): Aade todos los elementos de una coleccin a la coleccin actual. void clear(): Elimina todos los elementos de la coleccin. void removeAll(Collection collection): Elimina todos los elementos de la coleccin que aparecen en la coleccin collection. void retainAll(Collection collection): Elimina todos los elementos de la coleccin que no aparecen en la coleccin collection. Es decir, retiene los elementos que aparecen en collection.
6

Interfaz Collection

Collection es una interfaz (no proporciona ninguna implementacin concreta). La base para las clases concretas del API se encuentra en la clase AbstractCollection. Para crear estructuras se debe: 1. Crear una clase que implemente todos los mtodos de Collection. 2. Crear una clase que herede de AbstractCollection e implemente los mtodos necesarios, como por ejemplo size().
7

Interfaz List

Define un conjunto de datos ordenados permitiendo elementos duplicados. Aade operaciones con ndice y la posibilidad de trabajar con una parte de la lista.

Mtodos:

void add(int index, Object element): Inserta el objeto en la posicin indicada mediante el parmetro index. boolean add(Object element): Aade el objeto al final de la lista (en la ltima posicin). Object get(int index): Devuelve el objeto que se encuentra en la posicin de la lista indicada por el parmetro index.
8

Interfaz List

int indexOf(Object object): Devuelve la posicin de la primera aparicin de un elemento en la lista, o -1 si el elemento no est en la lista. int lastIndexOf(Object object): Devuelve la posicin de la ltima aparicin de un elemento en la lista, o -1 si el elemento no est en la lista. ListIterator listIterator(): Devuelve un iterador que representa la lista ordenada de elementos. boolean remove(int index): Elimina de la coleccin el objeto que aparecen en la posicin index.

Interfaz List

Object remove(Object obj): Elimina la primera aparicin del elemento indicado de la lista. Object set(int index, Object element): Elimina de la lista el elemento que se encuentra en la posicin index, y aade en esa posicin un nuevo elemento pasado como parmetro.

10

Interfaz List
ListIterator listIterator() ListIterator listIterator(int comienzo) List sublist(int inicio, int fin)

Los dos primeros mtodos devuelven una vista de la coleccin de datos (Iterator) que permiten recorrer sus elementos.
La interfaz ListIterator extiende a Iterator permitiendo realizar recorridos bidireccionales, aadir o modificar elementos de la coleccin.

11

Ejemplo
List list = ......... ListIterator iterador = list.listIterator(list.size()); while (iterator.hasPrevious()) { Object element = iterator.previous(); System.out.println(element); }

Se crea un iterador cuyo cursor se encuentra en la ltima posicin de la lista. Se recorre la lista en orden inverso mostrando los elementos por pantalla. La combinacin de List-ListIterator proporciona una forma elegante de recorrer la estructuras de datos.
12

Interfaz List

En el API Collections dispone de dos implementaciones concretas de la interfaz List:


Clase ArrayList (Vector en Java 1.1 con mtodos sincronizados). Listas simplemente enlazadas. Clase LinkedList. Listas doblemente enlazadas.

List

ArrayList
13

LinkedList

Clases ArrayList y LinkedList

ArrayList: No tiene ningn mtodo sincronizado (soporta el acceso concurrente a los datos).

Se representa internamente utilizando un array de objetos. Comienza con un tamao que se puede especificar en el constructor. Cuando se llena, aumenta su tamao en un 50% o 100% dependiendo del SDK.

LinkedList: Est implementada mediante una lista de nodos doblemente enlazada.

14

Interfaz List - Ejemplo


package colecciones; import java.util.*; public class ArrayListP { public static void main(String[] args) { List list = new ArrayList(); Salida: list.add("Liz"); [Liz, Rosa, Marta, Luis] list.add("Rosa"); list.add("Marta"); list.add("Luis"); Salida: System.out.println(list); Liz Rosa Marta Luis Iterator it = list.iterator(); while (it.hasNext()) { System.out.print(it.next() + "\n"); } } }
15

Interfaz Set

Hereda de Collection y no aade ningn mtodo. Representa un conjunto de datos (sin duplicados). Si se intenta aadir un elemento que ya se encontraba, no se producir ningn cambio.

Para determinar si un dato ya se encuentra se basan en los mtodos de la clase Object: equals() y hashCode().
El API de Collections proporciona dos implementaciones de esta interfaz : HashSet y TreeSet.

16

Interfaz Set
Set

HashSet

TreeSet

AbstractSet

HashSet y TreeSet son implementaciones de la interfaz Set. AbstractSet implementa algunos mtodos de la interfaz Set y sobreescribe los mtodos equals() y el mtodo hashCode().
17

Interfaz Set

Implementa el conjunto de datos utilizando un tabla hash (HashMap).


Los elementos no estn ordenados y pueden variar la posicin por las operaciones de balanceo.

Al basarse en una tabla hash para aadir objetos propios hay que sobreescribir el mtodo hashCode(). Por defecto, dos elementos se consideren iguales si: Devuelven true al utilizar equals() Devuelven el mismo hashCode()
18

Interfaz Set - Ejemplo


class MyObject { private int aValue = -1; public MyObject(int pValue) { this.aValue = pValue; } public boolean equals(Object pObj) { if (!(pObj instanceof MyObject)) return false; if (((MyObject)pObj).aValue == this.aValue) return true; else return false; } }
19

Interfaz Set
Set set = new HashSet(); false set.add(new MyObject(5)); set.add(new MyObject(7)); System.out.println(set.contains(new MyObject(5));

Se cre una clase MyObject y se sobreescribi el mtodo equals(). As dos instancias son iguales si tienen el mismo valor pero no se sobre escruibi el mtodo hashCode().
Por lo tanto, contains() devuelve false porque se le pasa una instancia diferente (hashCode diferente que el de la instancia del conjunto con valor 5).
20

Interfaz Set
class MyObject { private int aValue = -1; public MyObject(int pValue) { this.aValue = pValue; } public boolean equals(Object pObj) { if (!(pObj instanceof MyObject)) return false; if (((MyObject)pObj).aValue == this.aValue) return true; else return false; } public int hashCode() { Sobreescribir hasCode() return aValue; } }
21

Interfaz TreeSet

Esta implementacin utiliza un TreeMap para almacenar los objetos. Los objetos se guardan ordenados ascendentemente segn el orden del comparador que se pase en el constructor. El comparador debe ser consecuente con el mtodo equals() de los elementos del conjunto ya que el funcionamiento de la estructura se basa en el mtodo equals() pero el algoritmo de ordenamiento se basa en el mtodo compareTo() de la interfaz Comparator. Si dos objetos son iguales para el mtodo compareTo() lo sern para el conjunto (no se inserta) aunque el mtodo equals() diga lo contrario.
22

Interfaz TreeSet Ejemplo


import java.util.*; public class Ejemplo { public static void main(String[] args) { Set set = new HashSet(); set.add(Ins); set.add(Ana); set.add(Sonia); Salida: set.add(Laura); [Laura, Ins, Sonia, Rebeca, Ana] set.add(Rebeca); System.out.println(set); Set sortedSet = new TreeSet(set); Salida: [Ana, Ins, Laura, System.out.println(sortedSet); Rebeca, Sonia] }}
23

Interfaz Map

Define una estructura de datos que mapea claves con valores sin permitir claves duplicadas. Las clases que implementan la interfaz Map permiten localizar los objetos mediante una clave.
Object put(Object clave, Object valor): Inserta un elemento en la coleccin asocindole una clave. void putAll(Map mapa): Copia todas las asignaciones del mapa especificado al mapa actual (operacin opcional). void clear(): Elimina todas las asignaciones del mapa actual (operacin opcional).

Mtodos:

24

Interfaz Map

Object remove(Object clave): Elimina un elemento de la coleccin dada su clave; tambin elimina la clave y permite que pueda ser utilizada para otros elementos. Object get(Object clave): Devuelve un elemento de la coleccin dada una clave. boolean containsKey(Object clave): Permite saber si la coleccin est utilizando la clave para localizar algn elemento. boolean containsValue(Object valor): Permite saber si un elemento est en la coleccin. int size(): Devuelve el nmero de asignaciones de clave y valor en el mapa. boolean isEmpty(): Devuelve true si el mapa no contiene asignaciones de clave y valor.

25

Interfaz Map

Set keySet(): Devuelve un conjunto de claves que permiten localizar un elemento. Dado que un elemento puede aparecer varias veces, lo que este mtodo devuelve es un conjunto de claves. Collection values(): Devuelve una vista de coleccin de los valores que figuran en el mapa. Set entrySet(): Devuelve una vista de conjunto de las asignaciones que figuran en el mapa.

La API Collections ofrece dos implementaciones de la interfaz Map: HashMap y TreeMap.

26

Interfaz HashMap

Utiliza una tabla hash. Permite el valor null tanto como clave o valor. No garantiza el orden de los elementos. Tiene dos parmetros que afectan a su rendimiento: capacidad inicial (capacidad que tiene la tabla cuando es creada) y factor de carga (medida de la cantidad que podemos dejar llenarse a la tabla antes de que su tamao deba aumentarse). Cuando el nmero de entradas en la tabla excede el producto del factor de carga y la capacidad actual, se doblar la capacidad llamando al mtodo rehash. Si la capacidad inicial es mayor que el mximo nmero de entradas dividido por el factor de carga, la operacin de rehash nunca ocurrir.
27

Interfaz TreeMap

La implementacin de esta clase ordena los elementos por orden ascendente de clave ya sea el orden natural de los objetos o el orden establecido por el comparador que se pase en el constructor.
Como ocurre en la clase TreeSet el comparador ha de ser consistente con el mtodo equals().

28

You might also like