38

Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Embed Size (px)

Citation preview

Page 1: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)
Page 2: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)
Page 3: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas

₋ Implementaciones de propósito general₋ Wrappers (decorators)₋ Conveniencias (mini implementaciones útiles)₋ Implementaciones legadas₋ Implementaciones de propósito especial

Algoritmos La interfaz java.util.RandomAccess La clase java.util.Arrays

Page 4: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Colección₋ Una colección — a veces llamada

“contenedor” — es un objeto que agrupa múltiples elementos en una unidad simple

₋ Las colecciones son utilizadas para almacenar, recuperar, manipular y comunicar datos agregados.

₋ Típicamente representan elementos de datos que forman naturalmente un grupo

Page 5: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

A partir de Java 2 (1.2+) se incorpora un framework estándar para manejo de colecciones

Previo a Java 2 manejo básico mediante arrays y las clases java.util.Vector y java.util.Hashtable

Page 6: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

¿Qué provee el framework?₋ Interfaces₋ Clases concretas₋ Algoritmos

Page 7: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)
Page 8: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Interfaz raíz de la jerarquía de colecciones

Define la interfaz común para todas las colecciones concretas (excluidos los mapas)

Hasta Java 1.4 las colecciones son débilmente tipadas

Page 9: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Todas las colecciones concretas deben proveer un iterador

Permite navegar los elementos de la colección sin revelar su estructura interna

Page 10: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Extiende de la interfaz java.util.Collection

No admite elementos duplicados

No agrega nuevos métodos a la interfaz

Ordenado o desordenado

Page 11: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Extiende la interfaz java.util.Collection

Colección ordenada o “secuencia”

Acepta elementos duplicados

Permite el acceso posicional

Page 12: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Extiende la interfaz java.util.Iterator

Pensado para recorrer listas

Agrega las funcionalidades:₋ Iteración bidireccional₋ Reemplazo de

elementos₋ Inserción de elementos₋ Consulta de índice

posterior y siguiente (posición en la recorrida)

Page 13: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Extiende la interfaz java.util.Set

Set cuyos elementos son ordenados automáticamente₋ Ordenamiento

natural (Comparable)₋ Ordenamiento

mediante un Comparator provisto en tiempo de instanciación del set

Page 14: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

NO extiende la interfaz java.util.Collection

Representa un mapa de claves (objeto) a valores (objeto)

Cada clave asocia a los sumo un valor

Page 15: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Extiende la interfaz java.util.Map

Mappings ordenados por clave₋ Orden natural

(Comparable)₋ Comparator provisto

en tiempo de instanciación del mapa

Page 16: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Es importante contar con la capacidad de ordenar una colección de objetos por diferentes criterios.

Orden natural: un objeto “ordenable” debe implementar la interfaz java.lang.Comparable.

Las colecciones (mapas) “ordenables” automáticamente (inserción) esperan elementos (claves) comparables

Page 17: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Si el objeto no implementa la interfaz Comparable, o si necesito ordenarlos por un criterio diferente al por defecto, se debe utilizar un comparador externo que implemente la interfaz java.util.Comparator

Page 18: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Java.lang.Comparable Java.lang.Comparator

int obj1.compareTo(obj2) int compareTo(obj1, obj2)

Retorna: - < 0 – si obj1 < obj2 - > 0 – si obj1 ? obj2 - 0 – si obj1 == obj2

Igual que Comparable

Se deben modificar las clases cuyas instancias se quieren ordenar.

Se crea una clase por separado, definiendo el criterio.

Se puede crear una sola secuencia/criterio de ordenamiento

Se pueden crear n criterios

Page 19: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Implementaciones de java.util.List

₋ java.util.ArrayList₋ Implementación de array redimensionable₋ Esencialmente un Vector no sincronizado₋ Es la mejor implementación de la interfaz List

₋ java.util.LinkedList₋ Implementación de lista doblemente encadenada ₋ Podría proveer mejor performance que ArrayList si los

elementos son insertados o borrados frecuentemente₋ Útil para colas (Queues) y colas dobles (Deque)

Page 20: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Implementaciones de java.util.Set

₋ java.util.HashSet₋ Implementación de Set mediante tablas de hash₋ Desordenado₋ Implementación preferida de la interfaz

₋ java.util.LinkedHashSet₋ Implementacón ordenada mediante LinkedList y

HashSet₋ Performance cercana a la del HashSet

Page 21: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

₋ java.util.TreeSet₋ Implementa java.util.SortedSet mediante TreeMap₋ Ordenado₋ Garantiza O(log(n)) para las operaciones básicas (add,

remove, contains)

Page 22: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Implementaciones de java.util.Map

₋ java.util.HashMap₋ Implementación desordenada mediante tabla de hash₋ Básicamente tabla de hash no sincronizada₋ Soporta claves y valores null₋ O(k) para las operaciones básicas (get y put) si la

función de hash tiene una buena dispersión sobre los bucketts

Page 23: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Implementaciones de java.util.Map

₋ java.util.TreeMap₋ Implementación ordenada basada en “Red-black tree”

(árbol B binario simétrico)₋ “Red-Black tree” – árbol binario de búsqueda auto

balanceable (Rudolf Bayer 1972)₋ Garantiza O(log(n)) para las operaciones de búsqueda,

inserción y borrado

Page 24: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Implementaciones de java.util.Map

₋ java.util.LinkedHashMap₋ Implementación mediante tabla de hash y lista

encadenada₋ Ordenado por el órden de inserción de los elementos₋ Desempeño cercano al de HashMap₋ Útil para la construcción de cachés₋ El orden no se ve afectado por la reinserción de claves

Page 25: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)
Page 26: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Colecciones y mapas inmutables La clase java.util.Collections provee los siguientes

métodos para “decorar” colecciones y mapas devolviendo versiones inmutables de las mismas

₋ Collection unmodifiableCollection(Collection collection)

₋ List unmodifiableList(List list) ₋ Map unmodifiableMap(Map map) ₋ Set unmodifiableSet(Set set) ₋ SortedMap unmodifiableSortedMap(SortedMap

map) ₋ SortedSet unmodifiableSortedSet(SortedSet set)

Page 27: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Map Collections.singletonMap(Object key, Object value)

₋Retornan una colección (o mapa) inmutable conteniendo únicamente el elemento especificado

List Collections.nCopies(int n, Object o)₋Retorna una lista inmutable conteniendo n referencias al objeto especificado

Page 28: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

La clase java.util.Collections provee, entre otros, los siguientes algoritmos:

₋ void sort(List) – Ordena una lista mediante el algoritmo “merge sort” O(n*log n)

₋ int binarySearch(List, Object) – Busca por bipartición un elemento dentro de una lista ordenada en forma ascendente en órden natural

₋ void reverse(List) – Invierte el orden de los elementos de una lista

₋ void shuffle(List) – Permuta los elementos de una lista en forma aleatoria

Page 29: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

₋ void fill(List, Object) – Sobrescribe cada elemento de la lista con el valor recibido

₋ void copy(List dest, List src) – Copia la lista origen sobre la lista destino

₋ Object min(Collection) – Retorna el menor elemento de la colección (órden natural)

₋ Object max(Collection) - Retorna el mayor elemento de la colección (órden natural)

₋ void rotate(List list, int distance) – Rota todos los elementos de la lista la distancia especificada

Page 30: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

₋boolean replaceAll(List list, Object oldVal, Object newVal) – Reemplaza todas las ocurrencias de oldVal con newVal

₋int indexOfSubList(List source, List target) – Retorna el índice de la primer ocurrencia de la sub lista target en la lista source

₋int lastIndexOfSubList(List source, List target) - Retorna el índice de la última ocurrencia de la sub lista target en la lista source

₋void swap(List list, int, int) – Intercambia los elementos de las posiciones especificadas

Page 31: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Contiene una serie de métodos para manipular arrays₋ Ordenamiento₋ Búsqueda₋ Etc

Contiene un factory method estático que permite representar arrays como listas

Page 32: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)
Page 33: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Problema – antes de J2SE5.0

₋ Iterar sobre colecciones es dificil₋ Iterator solo es util para obtener los elementos.₋ Es propenso a errores.

₋ Los métodos que modifican la estructura (ejemplo: remove) no son intuitivos

Page 34: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Solución – nuevamente el complilador trabaja por nosotros

₋ Nueva sintaxis del loop₋ For (variable : Collection)

₋ Trabaja sobre colecciones y arrays

Page 35: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Viejo código (< J2SE5.0)

void cancelAll(Collection c) {for (Iterator i = c.iterator(); i.hasNext(); ){

TimerTask task = (TimerTask)i.next();task.cancel();

}}

Page 36: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Nuevo código (J2SE5.0 !)

void cancelAll(Collection<TimerTask> c) {for (TimerTask task : c)task.cancel();

}

Page 37: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

Principales interfaces Ordenamiento: Comparable, Comparator Implementaciones concretas

₋ Implementaciones de propósito general₋ Wrappers (decorators)₋ Conveniencias (mini implementaciones útiles)₋ Implementaciones legadas₋ Implementaciones de propósito especial

Algoritmos La interfaz java.util.RandomAccess La clase java.util.Arrays

Page 38: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)

The Java TutorialTrail de coleccioneshttp://java.sun.com/docs/books/tutorial/index.html

Thinking in Java, 3rd editionBruce Eckelhttp://www.odioworks.com/46-Bruce_Eckel's_Free_Electronic_Books.html