Publicado el 22 de Enero del 2019
503 visualizaciones desde el 22 de Enero del 2019
154,3 KB
31 paginas
Creado hace 11a (26/09/2012)
Experto Universitario Java Enterprise
Lenguaje Java Avanzado
Sesión 2: Colecciones de datos
© 2012-2013 Depto. Ciencia de la Computación e IA
Experto Universitario Java Enterprise
Índice
• Introducción
• Colecciones
• Enumeraciones e iteradores
• Polimorfismo e interfaces
• Wrappers de tipos básicos
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 2
Experto Universitario Java Enterprise
Introducción
• Java proporciona un amplio conjunto de clases útiles para desarrollar
aplicaciones
• En esta sesión veremos algunos grupos de ellas:
• Clases útiles para crear y gestionar diferentes tipos de colecciones
• Clases para recorrer, ordenar y manipular las colecciones
• Clases para encapsular nuestros tipos de datos
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 3
Experto Universitario Java Enterprise
Colecciones
• En el paquete java.util
• Representan grupos de objetos, llamados elementos
• Podemos encontrar de distintos tipos, según si sus elementos están ordenados, si
permiten repetir elementos, etc
• La interfaz Collection define el esqueleto que deben tener todos los tipos de
colecciones
• Por tanto, todos tendrán métodos generales como:
• boolean add(Object o)
• boolean remove(Object o)
• boolean contains(Object o)
• void clear()
• boolean isEmpty()
• Iterator iterator()
• int size()
• Object[] toArray()
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 4
Experto Universitario Java Enterprise
Listas de elementos
• La interfaz List hereda de Collection
• Operaciones propias de una colección tipo lista
• Los elementos tienen un orden (posición en la lista)
• Así, tendremos otros nuevos métodos, además de los de Collection:
• void add(int posicion, Object o)
• Object get(int indice)
• int indexOf(Object o)
• Object remove(int indice)
• Object set(int indice, Object o)
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 5
Experto Universitario Java Enterprise
Tipos de listas
• ArrayList: implementa una lista de elementos mediante un array de tamaño variable
• NO sincronizado
• Vector: existe desde las primeras versiones de Java, después se acomodó al marco de colecciones
implementando la interfaz List.
• Similar a ArrayList, pero SINCRONIZADO. Tiene métodos anteriores a la interfaz List:
• void addElement(Object o) / boolean removeElement(Object o)
• void insertElementAt(Object o, int posicion)
• void removeElementAt(Object o, int posicion)
• Object elementAt(int posicion)
• void setElementAt(Object o, int posicion)
• int size()
• LinkedList: lista doblemente enlazada. Útil para simular pilas o colas
• void addFirst(Object o) / void addLast(Object o)
• Object getFirst() / Object getLast()
• Object removeFirst() / Object removeLast()
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 6
Experto Universitario Java Enterprise
Conjuntos
• Grupos de elementos donde no hay repetidos
• Consideramos dos objetos de una clase iguales si su método equals
los da como iguales
• o1.equals(o2) es true
• Los conjuntos se definen en la interfaz Set, que, como List, también
hereda de Collection
• El método add definido en Collection devolvía un booleano, que
en este caso permitirá saber si se insertó el elemento en el conjunto, o
no (porque ya existía)
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 7
Experto Universitario Java Enterprise
Tipos de conjuntos
• HashSet: los objetos del conjunto se almacenan en una tabla hash.
• El coste de inserción, borrado y modificación suele ser constante
• La iteración es más costosa, y el orden puede diferir del orden de inserción
• LinkedHashSet: como la anterior, pero la tabla hash tiene los elementos
enlazados, lo que facilita la iteración
• TreeSet: guarda los elementos en un árbol
• El coste de las operaciones es logarítmico
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 8
Experto Universitario Java Enterprise
Mapas
• No forman parte del marco de colecciones
• Se definen en la interfaz Map, y sirven para relacionar un conjunto de
claves (keys) con sus respectivos valores
• Tanto la clave como el valor pueden ser cualquier objeto
• Object get(Object clave)
• Object put(Object clave, Object valor)
• Object remove(Object clave)
• Set keySet()
• int size()
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 9
Experto Universitario Java Enterprise
Tipos de mapas
• HashMap: Utiliza una tabla hash para almacenar los pares clave=valor.
• Las operaciones básicas (get y put) se harán en tiempo constante si la dispersión es adecuada
• La iteración es más costosa, y el orden puede diferir del orden de inserción
• Hashtable: como la anterior, pero SINCRONIZADA. Como Vector, está desde las
primeras versiones de Java
• Enumeration keys()
• TreeMap: utiliza un árbol para implementar el mapa
• El coste de las operaciones es logarítmico
• Los elementos están ordenados ascendentemente por clave
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 10
Experto Universitario Java Enterprise
Genéricos
• Colecciones de tipos concretos de datos
• A partir de JDK 1.5
• Aseguran que se utiliza el tipo de datos correcto
ArrayList<String> a = new ArrayList<String>();
a.add("Hola");
String s = a.get(0);
• Podemos utilizar genéricos en nuestras propias clases
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 11
Experto Universitario Java Enterprise
Enumeraciones e iteradores
• Las enumeraciones y los iteradores no son tipos de datos en sí, sino objetos
útiles a la hora de recorrer diferentes tipos de colecciones
• Con las enumeraciones podremos recorrer secuencialmente los elementos
de una colección, para sacar sus valores, modificarlos, etc
• Con los iteradores podremos, además de lo anterior, eliminar elementos de
una colección, con los métodos que proporciona para ello.
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 12
Experto Universitario Java Enterprise
Enumeraciones
• La interfaz Enumeration permite consultar secuencialmente los elementos de
una colección
• Para recorrer secuencialmente los elementos de la colección utilizaremos su
método nextElement:
Object item = enum.nextElement();
• Para comprobar si quedan más elementos que recorrer, utilizamos el método
hasMoreElements:
if (enum.hasMoreElements()) ...
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 13
Experto Universitario Java Enterprise
Enumeraciones
• Con lo anterior, un bucle completo típico para recorrer una colección
utilizando su enumeración de elementos sería:
// Obtener la enumeracion
Enumeration enum = coleccion.elements();
while (enum.hasMoreElements())
{
Object item = enum.nextElement();
...// Convertir item al objeto adecuado y
// hacer con el lo que convenga
}
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 14
Experto Universitario Java Enterprise
Iteradores
• La interfaz Iterator permite iterar secuencialmente sobre los elementos de una
colección
• Para recorrer secuencialmente los elementos de la colección utilizaremos su
método next:
Object item = iter.next();
• Para comprobar si quedan más elementos que recorrer, utilizamos el método
hasNext:
if (iter.hasNext()) …
• Para eliminar el elemento de la posición actual del iterador, utilizamos su método
remove:
iter.remove();
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 15
Experto Universitario Java Enterprise
Iteradores
• Con lo anterior, un bucle completo típico para recorrer una colección utilizando su
iterador sería:
// Obtener el iterador
Iterator iter = coleccion.iterator();
while (iter.hasNext())
{
Object item = iter.next();
...// Convertir item al objeto adecuado y
// hacer con el lo que convenga, por ejemplo
iter.remove();
}
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 16
Experto Universitario Java Enterprise
Bucles sin iteradores
• Nueva versión del for en JDK 1.5
• Permite recorrer tanto arrays como colecciones
• Previene salirse del rango de forma segura
List<String> lista = obtenerLista();
for(String cadena: lista)
System.out.println (cadena);
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 17
Experto Universitario Java Enterprise
Polimorfismo e interfaces
• Hacer referencia siempre mediante la interfaz
• Permite cambiar la implementación sin afectar al resto del programa
public class Cliente {
List<Cuenta> cuentas;
public Cliente() {
this.cuentas = new ArrayList<Cuenta>();
}
public List<Cuenta> getCuentas() {
return cuentas;
}
}
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 18
Experto Universitario Java Enterprise
Ejemplo: Algoritmos
• La clase Collections dispone de una serie de métodos útiles para
operaciones tediosas, como ordenar una colección, hacer una búsqueda
binaria, sacar su valor máximo, etc
• static void sort(List lista)
• static int binarySearch(List lista, Object objeto)
• static Object max(Collection col)
• ...
• Sirven para cualquier implementación de List
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Colecciones - 19
Experto Universitario Java Enterprise
Comparación de objetos
•
Los objetos deben ser correctamente comparables para ser compatibles
con las estructuras de datos y algoritmos.
• Comparación de igualdad: equals( )
• Comparación de mayor o menor:
Comentarios de: Sesión 2: Colecciones de datos - Lenguaje Java Avanzado (0)
No hay comentarios