definiciones introducción principales interfaces ordenamiento implementaciones concretas...
TRANSCRIPT
![Page 1: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/1.jpg)
![Page 2: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/2.jpg)
![Page 3: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/3.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/4.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/5.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/6.jpg)
¿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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/7.jpg)
![Page 8: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/8.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/9.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/10.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/11.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/12.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/13.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/14.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/15.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/16.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/17.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/18.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/19.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/20.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/21.jpg)
₋ 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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/22.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/23.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/24.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/25.jpg)
![Page 26: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/26.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/27.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/28.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/29.jpg)
₋ 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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/30.jpg)
₋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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/31.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/32.jpg)
![Page 33: Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/33.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/34.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/35.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/36.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/37.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061305/54a35c90a95467c80c8b497a/html5/thumbnails/38.jpg)
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