Unidad6-Colecciones Key

Descargar como zip, pdf o txt
Descargar como zip, pdf o txt
Está en la página 1de 56

CCPG1005

Programación
Orientada a Objetos
Unidad 6 - COLECCIONES
Contenido
6.1.- Framework Collection
6.2.- Listas
6.3.- Conjuntos
6.4.- Mapas
6.5.- Uso de colecciones y ejemplos
Objetivos
6.1 Explicar las diferentes políticas que gobiernan las
colecciones en el lenguaje propuesto para la correcta
elección de estas.
6.2. Desarrollar programas que utilicen clases del
marco de trabajo de colecciones para la resolución de
problemas complejos
6.3. Demostrar el uso de iteradores y otras operaciones
en tipos de datos agregados para el entendimiento de
algoritmos
Java Collection Framework
• Librería de clases contenedoras de Java que
sirven para almacenar colecciones de
objetos, como listas, conjuntos, mapas, …
• Las clases se encuentran en el paquete
estándar java.util
Java Collection Framework
Jerarquía del Framework
Interfaz Collection<T>
• Define las operaciones comunes a todas las
colecciones de Java.
• Los tipos básicos de colecciones son (subtipos
de Collection ) :

• Listas, definidas en la interfaz List


• Conjuntos, definidos en la interfaz Set
Interfaz Collection<T>
Operaciones básicas de consulta:
• size(): devuelve el número de elementos.
• isEmpty(): indica si tiene elementos.
• contains(Object e): indica si contiene el
objeto pasado como parámetro utilizando el
método equals.
Interfaz Collection<T>
Operaciones básicas de modificación:

add(T e): añade un elemento a la colección. Retorna un
booleano indicando si acepta la inserción.

remove(Object e): intenta eliminar el elemento. Retorna un
booleano indicando si ha sido eliminado. Utiliza el método
equals para localizar el objeto.
• clear(): elimina todos los elementos.
• addAll(Collection col): añade todos los elementos de la
colección col
• removeAll(Collection col): elimina todos los objetos contenidos
en col
Interfaz List<T>
• Define secuencias de elementos a los que se
puede acceder atendiendo a su posición
• Las posiciones van de 0 a size()-1.

• El acceso a una posición ilegal produce la


excepción IndexOutOfBoundsException
• El método add(T e) añade al final de la lista.
Interfaz List<T>
Añade a las operaciones de Collection métodos
de acceso por posición como:
• T get (int index)
• T set (int index, T element)
• void add (int index, T element)
• T remove (int index)
Clases que implementan
List<T>
• ArrayList <T>

• Implementación basada en arrays


redimensionables.
• Operaciones de inserción y modificación
ineficientes.
• Operaciones de creación y consulta rápidas.

• LinkedList (no se revisa en este curso)


Ejemplo List
Interfaz Set<T>
• Define conjuntos de elementos no repetidos
• Los métodos definidos permiten
realizar la lógica de conjuntos:
SortedSet<T>
• La interfaz java.util.SortedSet<T> extiende
Set<T> para proporcionar la funcionalidad
para conjuntos con elementos ordenados.
• El orden utilizado es:

• El orden natural.
• El orden alternativo proporcionado como
parámetro Comparator<T> en el constructor de la
clase que implemente esta interfaz.
SortedSet<T> - métodos
TreeSet<T>
• Implementación de conjuntos ordenados
basada en árboles binarios balanceados.
• Para su funcionamiento es necesario definir
un orden
• Las operaciones de búsqueda y modificación
son más lentas en TreeSet que en HashSet
TreeSet<T>
Un árbol es un tipo
de datos que simula
un árbol real
TreeSet<T>
• No hay elementos duplicados y hay orden de
los elementos en orden ascendente
• Implementa la clase
NavigableSet que
extiende de
SortedSet
TreeSet<T> - Constructores
• TreeSet(); // Orden natural
• TreeSet(Comparator o); // Orden alternativo
• TreeSet(Collection c); // Copia y Orden
natural
• TreeSet(SortedSet s); // Copia y Mismo orden
que s
TreeSet<T> - Ejemplo
TreeSet<Integer>h = new TreeSet<Integer>(); h.add(20); h.add(6); h.add(84);
h.add(9); h.add(8); System.out.println(h);

Salida : [6, 8, 9, 20, 84]


HashSet<T>
• Guarda los elementos del conjunto en una
tabla hash.

Tabla hash?
HashSet<T>
• No hay elementos duplicados y no hay orden
de los elementos
• Extiende la clase
AbstractSet e
implementa Set
HashSet<T> - Constructores
• Sin argumentos: HashSet()
• Con una colección como parámetro:
HashSet(Collection c)
• Se puede indicar la capacidad y el factor de
carga de la tabla: HashSet(int initialCapacity,
float loadFactor)
HashSet<T> - Métodos
1. add(Object e)
2. clear()
3. clone()
4. contains(Object o)
5. isEmpty()
6. iterator()
7. remove(Object o)
8. size()
HashSet<T> - Ejemplo
HashSet vs TreeSet
HashSet vs TreeSet
Interfaz Map<K,V>
• Un mapa no es una colección, sin embargo
contiene distintas colecciones:

• Conjunto de claves (Set)


• Colección de valores (Collection)
• Conjunto de pares (Map.Entry)
• Implementaciones HashMap y TreeMap
Interfaz Map<K,V>
SortedMap<K,V>
• La interfaz java.util.SortedMap<K,V>
extiende Map<K,V> para proporcionar la
funcionalidad para correspondencias con
claves ordenadas.
• El orden utilizado es:

• El orden natural.
• El orden alternativo proporcionado como
parámetro Comparator<T> en el constructor de la
clase que implemente esta interfaz.
SortedMap<K,V> - métodos
HashMap<K,V>
• Proporciona una implementación de la
interfaz Map basada en una tabla hash
• Constructores:

• Sin argumentos o con un mapa como parámetro.




HashMap()

HashMap(Map m)
• Con capacidad y factor de carga.


HashMap(int capacity)

HashMap(int capacity, float loadFactor)
HashMap<K,V> - métodos
● clear() ● keySet()
● clone() ● put(K key, V value)
● containsKey(Object key) ● putAll(Map m)
● containsValue(Object ● remove(Object key)
value) ● size()
● entrySet() ● values()
● get(Object key) ●

● isEmpty()

HashMap<K,V> - Ejemplo
TreeMap<K,V>
• proporciona una implementación de SortedMap:
Almacena los datos en un árbol binario equilibrado
ordenado.
• Búsqueda y modificación menos eficiente que en
HashMap.
• Constructores
TreeMap - Ejemplo
Orden de los objetos
• El orden utilizado por las colecciones
ordenadas (SortedSet, SortedMap) puede ser
el orden natural de los objetos (por defecto)
o el criterio de ordenación que se establece
en el constructor.

• La interfaz Comparable define el orden natural.


• La interfaz Comparator define un orden
alternativo.
Interfaz Comparable
• La interfaz Comparable impone el orden natural de
los objetos de las clases que la implementan
public interface Comparable<T> {
public int compareTo(T o);
}
• El método compareTo devuelve un entero positivo si
la relación es “mayor que”, negativo si es “menor
que” y cero si son iguales.
Interfaz Comparable - Ejemplo
Comparable Interface -
Ejemplo
Ejemplo Treeset con orden
natural
Interfaz Comparator

La interfaz Comparator permite definir un criterio de
ordenación
public interface Comparator<T>{
public int compare(T o1, T o2);
}
• El método compare devuelve un entero positivo si la relación es
“mayor que”, negativo si es “menor que” y cero si son iguales.
• Se utiliza un criterio de ordenación cuando los objetos que
queremos ordenar no tienen orden natural o ese orden no
interesa usarlo.
Interfaz Comparator - Ejemplo
Interfaz Comparator - Ejemplo
public class OrdenTitular implements
Comparator<Cuenta> {
public int compare(Cuenta o1, Cuenta o2) {
return (o1.getTitular().getNombre().
compareTo(o2.getTitular().getNombre()));
}
}
Treeset con criterio de
ordenamiento
Iteradores
Las colecciones de Java son iterables, es decir,
podemos recorrer todos sus elementos.
Interfaces Iterable e Iterator
• Java proporciona la interfaz Iterable que debe ser
implementada por aquellas clases sobre las que se
pueda iterar:

• A los objetos iterables se les exige que creen objetos


iterador (Iterator) para realizar la iteración.
Interfaz Iterator
• Un objeto Iterator<T> permite el acceso
secuencial a los elementos de una colección
y realizar recorridos sobre la colección.

• hasNext(): indica si quedan elementos en la


iteración.
• next(): devuelve el siguiente elemento de la
iteración.
• remove(): elimina el último elemento devuelto
por el iterador.
Interfaz Iterator
• Si no hay siguiente, next() lanza una excepción
NoSuchElementException.
• El método remove() permite eliminar elementos de
la colección.

• Forma recomendada para eliminar elementos durante la iteración.


En otro caso, se lanza una excepción
ConcurrentModificationException.
• Sólo una invocación a remove() por cada invocación a next(). Si no
se cumple, se lanza una excepción IllegalStateException.
Interfaz Iterator - Ejemplo
Interfaz Iterator - Ejemplo
Eliminar un elemento de la colección
Iterando con foreach
• El recorrido for each permite recorrer
objetos iterables sin manejar un objeto
iterador.
• Es la opción más común de recorrido.
Iterando con foreach - ejemplo
Mostrar una colección en pantalla :

También podría gustarte