ISIS1206- Estructuras de Datos Nivel 14

Anuncio
NIVEL 14: ESTRUCTURAS DE ACCESO
DIRECTO
Genericidad, Java Collections,
Cupi2Collections
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
2
Agenda
• La tabla de hashing de Java:
Hashtable
• Genericidad vs. polimorfismo
• Java Collections Framework
• Cupi2 Collections Framework
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
3
Java Hashtable
• Asociación llave – valor.
• Ni la llave ni el valor pueden ser tipos simples
de datos.
• Los métodos
•
•
•
put (Object key, Object value)
get (Object key)
remove (Object key)
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
4
Java Hashtable: Ejemplo de Uso
Hashtable estudiantes = new Hashtable ( );
estudiantes.put( “200327337", new Estudiante (“Maria") );
estudiantes.put( “20042790", new Estudiante (“Juan") );
Estudiante e1=(Estudiante)estudiantes.get( “200327337” );
estudiantes.remove( “220042790” );
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
5
Agenda
• La tabla de hashing de Java:
Hashtable
• Genericidad vs. polimorfismo
• Java Collections Framework
• Cupi2 Collections Framework
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
6
Polimorfismo: Poli (muchas) - morfo (forma)
• Estructura polimorfa : puede contener objetos de
distintas clases.
•
ArrayList lo hemos utilizado como una estructura
polimorfa.
ArrayList lista = new ArrayList( );
lista.add( new Integer( 1 ) );
lista.add( new Estudiante( “Juan” );
Integer num = ( Integer )lista.get( 0 );
Estudiante e1 = ( Estudiante )lista.get( 1 );
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
7
Polimorfismo y estructuras polimorfas
• En una estructura polimorfa guardamos objetos de
cualquier clase, pero al recuperarlos debemos
informar la clase a la que pertenecen (casting).
• Es un mecanismo poderoso de reutilización
• Tienen el problema de que no podemos garantizar
que solo haya objetos de una clase
• Hace el programa un poco más difícil de leer.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
8
Genericidad
• Permite definir estructuras
con elementos de
un solo tipo.
• El compilador verifica que no haya
inconsistencias.
• Es un error tratar de agregar un objeto de otra
clase.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
9
Genericidad
• Desde Java 5 existe una implementación
genérica de Arraylist:
ArrayList<Integer> lista = new ArrayList<Integer>( );
lista.add( new Integer( 1 ) );
Integer num =lista.get( 0 );
ERROR DE COMPILACIÓN
lista.add( new Estudiante( “Juan” );
Estudiante e1 = ( Estudiante )lista.get( 1 );
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
10
Genericidad
• Para poder usar estructuras
genéricas se debe
compilar con Java 5 o superior.
• Las estructuras genéricas pueden utilizar una
sintaxis más compacta para hacer recorridos:
ArrayList<Integer> lista = new ArrayList<Integer>( );
for( Integer elem : lista )
{
System.out.println( elem );
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
11
Genericidad
• Para usar una clase genérica basta
con definir
el (o los) tipos de datos que va a contener.
Hashtable<String,Estudiante> estudiantes;
estudiantes = new Hashtable<String, Estudiante>( );
estudiantes.put( “200398892”, new Estudiante( “Luis” ) );
• Para usar los elementos que contiene no hay
necesidad de hacer ninguna conversión.
Estudiante e1 = h1.get( “200398892” );
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
12
Genericidad
• Es posible definir una interfaz genérica:
Variable para indicar el tipo
public interface Iterador<T>
{
public boolean haySiguiente( );
public T darSiguiente( );
public void reiniciar( );
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
13
Genericidad
• Convenciones para
los nombres de los
parámetros
• E - Element (used extensively by the Java
Collections Framework)
• K - Key
• N - Number
• T - Type
• V – Value
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
14
Genericidad
•
Para definir una clase genérica se deben definir
parámetros para los tipos de datos que va a contener
public class IteradorSimple<T> implements Iterador<T>
{
private T[] elems;
private int posActual;
private int sigPosLibre;
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
15
public class Curso<T> implements Iterador<T>
{
private T[] elems;
private int posActual;
private int sigPosLibre;
public boolean haySiguiente( )
{
}
public T darSiguiente( )
{
}
public void reiniciar( )
{
}
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
16
Genericidad
•
Los métodos utilizan los parámetros que definen los tipos como si
fueran clases normales:
public class Curso<T> implements Iterador<T>
{
private T[] elems;
…
}
public T darSiguiente( )
{
return elems[posActual + 1];
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
17
Genericidad
• Una clase se puede parametrizar
con un tipo
que cumpla ciertos contratos:
• Por ejemplo:
•
Se quiere tener un árbol binario ordenado y
genérico donde los nodos se puedan comparar
según el orden lógico del nodo.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
18
Genericidad
• Si el nodo
•
Orden aritmético
• Si el nodo
•
del árbol es de tipo Integer
del árbol es de tipo String
Orden lexicográfico
• Si el nodo del árbol es de tipo MiClase
•
Definir el orden natural
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
19
Genericidad
• Los nodos deben implementar la interfaz
Comparable de Java.
public interface Comparable<T>
{
public int compareTo( T obj );
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
20
Genericidad
•
Una clase se puede parametrizar con un tipo que cumpla ciertos contratos:
public class ArbolBinarioOrdenado<T extends Comparable<? super T>>
{
…
public void insertar( T pElemento )
{
T elem = …
int resultado = elem.compareTo( pElemento );
}
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
21
Agenda
• La tabla de hashing de Java:
Hashtable
• Genericidad vs. polimorfismo
• Java Collections Framework
• Cupi2 Collections Framework
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
22
Java Collections Framework
• Colección (contenedora)
: Objeto que agrupa
múltiples elementos
• El framework
define una arquitectura para
representar y manipular las colecciones.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
23
Java Collections Framework
• Elementos del framework:
Interfaces
• Implementaciones – Clases
• Algoritmos – métodos
•
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
24
Dos tipos de interfaces
Collection
Set
List
SortedSet
Jerarquía de interfaces
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Map
Queue
SortedMap
25
Java Collections Framework
• Interfaces genéricas (Generics):
•
Las colecciones pueden ser manipuladas
independientemente de los detalles de su
representación.
public interface Collection<E> extends
Iterable<E>
{
…
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Elemento de la colección
26
Java Collections Framework
• Collection: Representa
un grupo de objetos o
elementos.
• Es la interfaz más general
• Algunos tipos permiten elementos duplicados
otros no.
• Algunos están ordenados otros no
• No hay implementación directa de la interfaz,
pero sí de sus subinterfaces (Set y List)
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
27
Collection
List
Set
Queue
SortedSet
ArrayList
LinkedList
Interfaz
Implementación
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
TreeSet
LinkedHashSet
HashSet
28
Java Collections Framework
Ejemplos:
• Una colección, puede ser un List, un Set, u otro
tipo de Collection
•
Collection<String> c
• Crear un ArrayList (una
implementación de la
interfaz List), que contiene todos los elementos
en c.
•
List<String> list = new ArrayList<String>(c);
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
29
public interface Collection<E> extends Iterable<E> {
// Basic operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element);
//optional
boolean remove(Object element); //optional
Iterator<E> iterator();
// Bulk operations
boolean containsAll(Collection<?> c);
Acepta cualquier
colección
Acepta elementos de la
colección o hijos de la misma
boolean addAll(Collection<? extends E> c); //optional
boolean removeAll(Collection<?> c);
//optional
boolean retainAll(Collection<?> c);
//optional
void clear();
//optional
// Array operations
Object[] toArray();
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
30
Recorriendo colecciones
• (1) for-each
•
Sintaxis
Tipo del elemento
referencia
Referencia a la colección
for (Object o : collection)
System.out.println(o);
Uso de la referencia
Se puede leer como: “para cada objeto en la colección haga”
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
31
Recorriendo colecciones
• (1) Ejemplo
for-each
public int sumar( Collection<Integer> enteros )
{
int total = 0;
for( Integer i : enteros )
{
total += i;
}
return total;
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
32
Java Collections Framework
• (2) Interface Iterator
public interface Iterator<E>
{
boolean hasNext(); //Retorna true si
la iteración
tiene más elementos
E next();
//Retorna el elemento siguiente en la
iteración
void remove();
por next()
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
//Elimina el último elemento retornado
33
Recorriendo colecciones
• (2) Ejemplo Iterator
public int sumar( Collection<Integer> enteros )
{
int total = 0;
Iterator<Integer> it = enteros.iterator();
while( it.hasNext() )
{
Integer i = it.next();
total += i;
}
return total;
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
34
Java Collections Framework
• Set : Colección sin elementos repetidos.
• Implementaciones:
•
•
•
HashSet: Almacena los elementos en una tabla de
hash
TreeSet: Almacena los elementos en un árbol rojonegro. Están ordenados por sus valores.
LinkedHashSet: Almacena los elementos en una
tabla de hash con una lista encadenada a través
de ellos. Los elementos están ordenados en orden
de inserción.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
35
Java Collections Framework
Ejemplos:
• Se tiene una colección c, y se quiere crear una
nueva que tenga los mismos elementos pero
sin duplicados.
Collection<Type> noDups = new HashSet<Type>(c);
• Mantener el orden de la colección
removiendo los duplicados
Collection<Type> noDups = new
LinkedHashSet<Type>(c);
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
original
36
Java Collections Framework
• List: Colección ordenada
•
•
o secuencia.
Puede contener elementos repetidos
Operaciones para:
Acceso a los elementos según su posición en la lista.
• Búsqueda de un objeto especifico y retornar la posición
• Iterar utilizando la característica de secuencia de la lista
• Manejar rangos dentro de la lista
•
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
37
• Implementaciones:
•
ArrayList: Arreglo cuyo tamaño se puede
redimensionar
•
•
•
Permite elementos nulos
Provee métodos para manipular el tamaño del
arreglo usado para almacenar la lista.
LinkedList: Provee métodos para manejar la
cabeza y la cola de la lista.
•
La lista encadenada puede ser usada como una
pila o cola.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
38
• Queue : Colección que maneja la prioridad para
procesar los elementos
La cabeza de la cola es el elemento que siempre va a ser
removido.
• Provee operaciones adicionales para insertar, extraer e
inspeccionar los elementos.
• Generalmente, los elementos están ordenados de tal
manera que el primero en entrar es el primero en salir
(FIFO).
• La cola de prioridades ordena de acuerdo a un criterio o al
orden natural de los elementos.
• Las implementaciones deben especificar cómo están
ordenados los elementos.
•
• SortedSet: Mantiene los elementos ordenados
ascendentemente
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
39
Map
SortedMap
HashMap
TreeMap
Interfaz
LinkedHashSet
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Implementación
40
Java Collections Framework
• Map: Objeto que mapea llaves y valores.
• No contiene llaves repetidas
• Proporciona tres vistas de la colección:
•
•
•
Colección de llaves (keySet)
Colección de valores (values)
Colección de parejas llave-valor (entrySet)
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
41
public interface Map<K,V> {
// Basic operations
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
// Bulk operations
void putAll(Map<? extends K, ? extends V> m);
void clear();
// Collection Views
public Set<K> keySet();
public Collection<V> values();
public Set<Map.Entry<K,V>> entrySet();
// Interface for entrySet elements
public interface Entry {
K getKey();
V getValue();
V setValue(V value);
}
}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
42
Java Collections Framework
• Implementaciones:
•
•
•
HashMap
TreeMap
LinkedHashMap
• Comportamiento y desempeño
análogo a
HashSet, TreeSet y LinkedHashSet
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
43
Java Collections Framework
• Ejemplo:
Se tiene un Map llamado m
•
Crear un HashMap que contenga las mismas
parejas llave-valor que m
Map<K, V> copy = new HashMap<K,
V>(m);
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
44
Java Collections Framework
• SortedMap: Mantiene los elementos
ordenados ascendentemente de acuerdo a las
llaves
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
45
Tarea
• Consultar la documentación
de las interfaces y
clases de Collections Framework
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
46
Agenda
• La tabla de hashing de Java:
Hashtable
• Genericidad vs. polimorfismo
• Java Collections Framework
• Cupi2 Collections Framework
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
47
CUPI2 Collections
• Proyecto que consiste en el desarrollo de un
conjunto de estructuras de datos y algoritmos
en Java.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
48
CUPI2 Collections
• El objetivo de Cupi2 Collections es mostrar
una
forma sencilla de implementar diversas clases
de estructuras así como la utilidad de las
mismas.
• Cada estructura
•
•
•
implementada tiene:
implementación (archivos .java)
documentación (javadoc)
pruebas (JUnit)
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
49
Cupi2 Collections Framework
•
Estructuras genéricas:
•
•
•
•
•
Iteradores
Estructuras lineales
Estructuras de acceso directo
Estructuras recursivas
Estructuras no lineales
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
50
CUPI2 Collections
Estructuras implementadas:
•
LINEALES
•
•
•
•
•
Listas: Lista, Lista Encadenada, Lista Encadenada Ordenada
Colas: Cola Encadenada, Cola Prioridad
Conjunto
Iteradores: Iterador Simple, Iterador Flexible
Secuencia: Algoritmos para búsqueda Binaria, búsqueda Secuencial,
ordenamiento Burbuja, ordenamiento por Inserción, ordenamiento por
Selección, Quick Sort, Shell Sort.
Pila Encadenada
• …
•
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
51
CUPI2 Collections
Estructuras implementadas:
•
•
•
ESTRUCTURAS RECURSIVAS BINARIAS
•
Árboles: Binario, Binario Ordenado, AVL, Rojo-Negro
•
…
ESTRUCTURAS RECURSIVAS N-ARIAS
•
Arboles: 2_3, 2_4, n-ario, B, Heap
•
Trie
•
…
ESTRUCTURAS NO LINEALES
•
Grafos dirigidos: algoritmo de Dijkstra
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
52
CUPI2 Collections
Estructuras implementadas:
•
ESTRUCTURAS DE ACCESO DIRECTO
•
BitArray
•
BitString
•
Tabla de Hashing
•
Text: Algoritmo de Huffman
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
53
Tarea
• Recorrer el sitio WEB del proyecto y visitar la
descripción de cada una de las estructuras de
datos que allí se encuentran desarrolladas.
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Descargar