definiciones introducción principales interfaces ordenamiento implementaciones concretas...

Post on 31-Dec-2014

3 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

Todas las colecciones concretas deben proveer un iterador

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

Extiende de la interfaz java.util.Collection

No admite elementos duplicados

No agrega nuevos métodos a la interfaz

Ordenado o desordenado

Extiende la interfaz java.util.Collection

Colección ordenada o “secuencia”

Acepta elementos duplicados

Permite el acceso posicional

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)

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

NO extiende la interfaz java.util.Collection

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

Cada clave asocia a los sumo un valor

Extiende la interfaz java.util.Map

Mappings ordenados por clave₋ Orden natural

(Comparable)₋ Comparator provisto

en tiempo de instanciación del mapa

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

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

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

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)

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

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

remove, contains)

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

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

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

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)

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

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

₋ 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

₋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

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

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

Solución – nuevamente el complilador trabaja por nosotros

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

₋ Trabaja sobre colecciones y arrays

Viejo código (< J2SE5.0)

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

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

}}

Nuevo código (J2SE5.0 !)

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

}

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

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

top related