0% encontró este documento útil (0 votos)
21 vistas27 páginas

Interfaces

Este documento trata sobre las colecciones en Java, incluyendo las interfaces Collection, List, Set y Map. Describe algunas clases que implementan estas interfaces como ArrayList, LinkedList, HashSet y HashMap.

Cargado por

reynerquispe
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
21 vistas27 páginas

Interfaces

Este documento trata sobre las colecciones en Java, incluyendo las interfaces Collection, List, Set y Map. Describe algunas clases que implementan estas interfaces como ArrayList, LinkedList, HashSet y HashMap.

Cargado por

reynerquispe
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 27

Tema 4 Colecciones en Java

Programacin Orientada a Objetos


Curso 2013/2014
Contenido

 Colecciones (paquete java.util):


 Interfaz Collection<T>
 Interfaz List<T>
 Interfaz Set<T>
 Interfaz Map<K,T>
 Copia de colecciones.
 Orden objetos.
 Iteradores.
 Recomendaciones.

Curso 2013/2014 Programacin Orientada a Objetos 2


Colecciones en Java
 Las colecciones en Java son un ejemplo destacado de
implementacin de cdigo reutilizable utilizando un
lenguaje orientado a objetos.
 Todas las colecciones son genricas.
 Los tipos abstractos de datos se definen como interfaces.
 Se implementan clases abstractas que permiten
factorizar el comportamiento comn a varias
implementaciones.
 Un mismo TAD puede ser implementado por varias clases
 List: LinkedList, ArrayList

Curso 2013/2014 Programacin Orientada a Objetos 3


Colecciones en Java
devuelve devuelve
Iterator Collection Map

devuelve

ListIterator List Set SortedMap AbstractMap

AbstractCollection SortedSet TreeMap HashMap

AbstractList AbstractSet

extends
HashSet TreeSet implements
interface
ArrayList AbstractSequentialList
class
LinkedList
Curso 2013/2014 Programacin Orientada a Objetos 4
Interfaz Collection<T>
 Define las operaciones comunes a todas las colecciones
de Java.

 Permite usar colecciones basndonos en su interfaz en


lugar de en la implementacin.

 Los tipos bsicos de colecciones son (subtipos de


Collection<T>) :

 Listas, definidas en la interfaz List<T>

 Conjuntos, definidos en la interfaz Set<T>

Curso 2013/2014 Programacin Orientada a Objetos 5


Interfaz Collection<T>
 Operaciones bsicas de consulta:

 size(): devuelve el nmero de elementos.

 isEmpty(): indica si tiene elementos.

 contains(Object e): indica si contiene el objeto


pasado como parmetro utilizando el mtodo equals.

Curso 2013/2014 Programacin Orientada a Objetos 6


Interfaz Collection<T>
 Operaciones bsicas de modificacin:
 add(T e): aade un elemento a la coleccin.
 Retorna un booleano indicando si acepta la insercin.
 remove(Object e): intenta eliminar el elemento.
 Retorna un booleano indicando si ha sido eliminado.
 Utiliza el mtodo equals para localizar el objeto.
 clear(): elimina todos los elementos.
 addAll(Collection<? extends T> col): aade
todos los elementos de la coleccin col
 removeAll(Collection<?> col): elimina todos los
objetos contenidos en col

Curso 2013/2014 Programacin Orientada a Objetos 7


Interfaz List<T>
 La interfaz List<T> define secuencias de elementos a los
que se puede acceder atendiendo a su posicin.

 Las posiciones van de 0 a size()-1.


 El acceso a una posicin ilegal produce la excepcin
IndexOutOfBoundsException
 El mtodo add(T e) aade al final de la lista.
 Aade a las operaciones de Collection mtodos de
acceso por posicin como:
 T get (int index)
 T set (int index, T element)
 void add (int index, T element)
 T remove (int index)

Curso 2013/2014 Programacin Orientada a Objetos 8


Clases que implementan List<T>
 ArrayList<T>
 Implementacin basada en arrays redimiensionables.
 Operaciones de insercin y modificacin ineficientes.
 Operaciones de creacin y consulta rpidas.

 LinkedList<T>
 Implementacin basada en listas doblemente enlazadas
 Inserciones y modificaciones rpidas, especialmente en el
principio y el final:
 Mtodos no disponibles en List<T>: addFirst,
addLast, removeFirst, removeLast
 Acceso aleatorio a elementos ineficiente.
 Acceso eficiente al principio y al final de la lista:
 getFirst y getLast

Curso 2013/2014 Programacin Orientada a Objetos 9


Interfaz Set<T>
 La interfaz Set<T> define conjuntos de elementos no repetidos.
 Implementaciones de conjuntos:
 HashSet<T>:
 Guarda los elementos del conjunto en una tabla hash.
 Para evitar la insercin de elementos repetidos, la igualdad de los
objetos se comprueba comparando los hashCode, si son iguales se
compara con equals.
 TreeSet<T>:
 Implementacin de conjuntos ordenados basada en rboles
binarios balanceados.
 Para su funcionamiento es necesario definir un orden (se estudia
ms adelante).
 Las operaciones de bsqueda y modificacin son ms lentas en
TreeSet que en HashSet

Curso 2013/2014 Programacin Orientada a Objetos 10


Interfaz Map<K,V>
 La interfaz Map<K,V> define el tipo de datos que representa
pares <clave, valor>
 Un mapa no puede tener claves duplicadas.
 Cada clave slo puede tener un valor asociado.

 Un mapa no es una coleccin, sin embargo contiene distintas


colecciones:
 Conjunto de claves (Set<K>)
 Coleccin de valores (Collection<V>)
 Conjunto de pares <clave, valor> (Map.Entry<K,V>)

 Las implementaciones disponibles son:


 HashMap<T>: implementacin basada en una tabla hash
 TreeMap<T>: implementacin basada en rboles balanceados.
 Las claves estn ordenadas (SortedSet<K>).

Curso 2013/2014 Programacin Orientada a Objetos 11


Interfaz Map<K,V>
 Mtodos bsicos:
 V put(K clave, V valor): inserta una asociacin en el
mapa.
 Retorna el valor de la antigua asociacin, si la hubiera.
 V get(clave): retorna el valor asociado a una clave.
 Si la asociacin no existe, devuelve nulo.
 Set<K> keySet(): devuelve el conjunto de claves.
 Collection<V> values(): devuelve la coleccin de valores.
 boolean containsKey(key): indica si existe una clave.
 Set<Map.Entry<K, V>> entrySet(): devuelve el conjunto
de todas las asociaciones, Map.Entry<K, V>:
 getKey(): consultar la clave.
 getValue(): consultar el valor.

Curso 2013/2014 Programacin Orientada a Objetos 12


Copia de colecciones
 Todas las clases que implementan colecciones ofrecen un
constructor de copia y el mtodo clone.
 En ambos casos construye una copia superficial del
objeto receptor. puntos

LinkedList<Punto> puntos;

LinkedList<Punto> copia;

0 2 0 2
// Opcin 1: copia con clone
copia = (LinkedList<Punto>)puntos.clone(); 0 0 2 2

// Opcin 2: constructor de copia


copia = new LinkedList<Punto>(puntos);

copia
Curso 2013/2014 Programacin Orientada a Objetos 13
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 ordenacin
que se establece en el constructor.
 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 mtodo compareTo devuelve un entero positivo si la


relacin es mayor que, negativo si es menor que y cero
si son iguales.
Curso 2013/2014 Programacin Orientada a Objetos 14
Orden natural de Cuenta

public class Cuenta implements Comparable<Cuenta>{



public int compareTo(Cuenta otraCta) {
if (this.codigo > otraCta.codigo)

return 1;

else if (this.codigo < otraCta.codigo)

return -1;

else return 0;
}
}

Curso 2013/2014 Programacin Orientada a Objetos 15


TreeSet<Cuenta> con orden natural
public class Persona {

private TreeSet<Cuenta> misCuentas;

public Persona(String dni, String nombre){



//TreeSet utiliza el orden natural de la clase Cuenta
misCuentas = new TreeSet<Cuenta>();
}

/**
* Aade una cuenta a la coleccin de la persona que es titular
* @param cta Cuenta a aadir en la coleccin
* @return true si la cuenta se ha aadido y false en caso contrario
*/
public boolean addCuenta(Cuenta cta){
return misCuentas.add(cta);
}
}

Curso 2013/2014 Programacin Orientada a Objetos 16


Criterios de ordenacin
 Para definir un criterio de ordenacin hay que implementar
la interfaz Comparator.

public interface Comparator<T> {


public int compare(T o1, T o2);
}

 El mtodo compare devuelve un entero positivo si la relacin es


mayor que, negativo si es menor que y cero si son iguales.

 Se utiliza un criterio de ordenacin cuando los objetos que


queremos ordenar no tienen orden natural o ese orden no
interesa usarlo.

Curso 2013/2014 Programacin Orientada a Objetos 17


Criterios de ordenacin para Cuenta

public class OrdenSaldo implements Comparator<Cuenta>{


public int compare(Cuenta o1, Cuenta o2) {
if (o1.getSaldo() > o2.getSaldo())
return 1;
else if (o1.getSaldo() < o2.getSaldo())
return -1;
else
return 0;
}
}

Curso 2013/2014 Programacin Orientada a Objetos 18


Criterios de ordenacin para Cuenta

public class OrdenTitular implements Comparator<Cuenta> {


public int compare(Cuenta o1, Cuenta o2) {
return (o1.getTitular().getNombre().
compareTo(o1.getTitular().getNombre()));

}
}

Curso 2013/2014 Programacin Orientada a Objetos 19


TreeSet<Cuenta> con criterio de ordenacin

public class Persona {



private TreeSet<Cuenta> misCuentas;

public Persona(String dni, String nombre){



misCuentas = new TreeSet<Cuenta>(new OrdenTitular());

//TreeSet utiliza el orden establecido


//en la clase OrdenTitular para ordenar las cuentas
}

Curso 2013/2014 Programacin Orientada a Objetos 20


Iteradores
 Las colecciones de Java son iterables, es decir, podemos
recorrer todos sus elementos.
 Se utilizan iteradores para que el cdigo que realiza el
recorrido no conozca las particularidades de la estructura
de datos: lista enlazada, lista basada en arrays, etc.

public double posicionGlobal(List<Deposito> depositos) {


double posicion = 0;
for (Deposito deposito : depositos) {
posicion += deposito.getCapital();
}
return posicion;
}

Curso 2013/2014 Programacin Orientada a Objetos 21


Iteradores
 Java proporciona la interfaz Iterable<T> que debe ser
implementada por aquellas clases sobre las que se pueda
iterar:
public interface Iterable<T> {

Iterator<T> iterator();
}

 A los objetos iterables se les exige que creen objetos


iterador (Iterator) para realizar la iteracin.

 Los arrays y la interfaz Collection son iterables.

Curso 2013/2014 Programacin Orientada a Objetos 22


Iteradores
 Interfaz Iterator<T>:
 hasNext(): indica si quedan elementos en la iteracin.
 next(): devuelve el siguiente elemento de la iteracin.
 remove(): elimina el ltimo elemento devuelto por el iterador.

public interface Iterator<T> {

boolean hasNext();

T next();

void remove();
}

Curso 2013/2014 Programacin Orientada a Objetos 23


Recorrido for each
 El recorrido for each permite recorrer objetos iterables sin
manejar un objeto iterador.
 Es la opcin ms comn de recorrido.

public double posicionGlobal(List<Deposito> depositos) {


double posicion = 0;
for (Deposito deposito : depositos) {
posicion += deposito.getCapital();
}
return posicion;
}

Curso 2013/2014 Programacin Orientada a Objetos 24


Recorrido explcito con iterador
 Interesa manejar un iterador cuando queremos eliminar
algn elemento de la coleccin.
 En Java slo se puede modificar una coleccin que se
est recorriendo utilizando explcitamente el iterador.

public double filtrar(List<Deposito> depositos) {


Iterator<Deposito> it = depositos.iterator();
while (it.hasNext()) {
Deposito deposito = it.next();
if (deposito.getCapital() < 1000)
it.remove();
}
}

Curso 2013/2014 Programacin Orientada a Objetos 25


Recomendaciones
 Programar hacia el TAD
 En constructores y mtodos pblicos, el tipo de retorno y el
tipo de los parmetros se especifica utilizando la interfaz
(por ejemplo List en lugar de LinkedList)

 Las colecciones ofrecen mayor funcionalidad que los


arrays.

 Podemos obtener una lista a partir de un array:

 List<Deposito> lista =
Arrays.asList(arrayDepositos);

Curso 2013/2014 Programacin Orientada a Objetos 26


Recomendaciones
 Los colecciones suelen producir aliasing incorrectos.
 Soluciones:

 Copiar la coleccin (clone o constructor de copia).

 Devolver una vista no modificable de la coleccin:


 Collections.unmodifiableList(depositos);
 Existe una operacin anloga para cada interfaz de las
colecciones.
 Es recomendable documentar que se devuelve una vista no
modificable.
 Es ms eficiente que construir una copia.

Curso 2013/2014 Programacin Orientada a Objetos 27

También podría gustarte