La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Definiciones Introducción Principales interfaces Ordenamiento Implementaciones concretas Implementaciones de propósito general Wrappers (decorators)"— Transcripción de la presentación:

1

2

3 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

4 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

5 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

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

7

8 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

9 Todas las colecciones concretas deben proveer un iterador Permite navegar los elementos de la colección sin revelar su estructura interna

10 Extiende de la interfaz java.util.Collection No admite elementos duplicados No agrega nuevos métodos a la interfaz Ordenado o desordenado

11 Extiende la interfaz java.util.Collection Colección ordenada o secuencia Acepta elementos duplicados Permite el acceso posicional

12 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)

13 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

14 NO extiende la interfaz java.util.Collection Representa un mapa de claves (objeto) a valores (objeto) Cada clave asocia a los sumo un valor

15 Extiende la interfaz java.util.Map Mappings ordenados por clave Orden natural (Comparable) Comparator provisto en tiempo de instanciación del mapa

16 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

17 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

18 Java.lang.ComparableJava.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

19 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)

20 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

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

22 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

23 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

24 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

25

26 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)

27 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

28 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) void sort(List) int binarySearch(List, Object) – Busca por bipartición un elemento dentro de una lista ordenada en forma ascendente en órden natural int binarySearch(List, Object) void reverse(List) – Invierte el orden de los elementos de una lista void reverse(List) void shuffle(List) – Permuta los elementos de una lista en forma aleatoria void shuffle(List)

29 void fill(List, Object) – Sobrescribe cada elemento de la lista con el valor recibido void fill(List, Object) void copy(List dest, List src) – Copia la lista origen sobre la lista destino void copy(List dest, List src) Object min(Collection) – Retorna el menor elemento de la colección (órden natural) Object min(Collection) Object max(Collection) - Retorna el mayor elemento de la colección (órden natural) Object max(Collection) void rotate(List list, int distance) – Rota todos los elementos de la lista la distancia especificada void rotate(List list, int distance)

30 boolean replaceAll(List list, Object oldVal, Object newVal) – Reemplaza todas las ocurrencias de oldVal con newVal boolean replaceAll(List list, Object oldVal, Object newVal) int indexOfSubList(List source, List target) – Retorna el índice de la primer ocurrencia de la sub lista target en la lista source int indexOfSubList(List source, List target) int lastIndexOfSubList(List source, List target) - Retorna el índice de la última ocurrencia de la sub lista target en la lista source int lastIndexOfSubList(List source, List target) void swap(List list, int, int) – Intercambia los elementos de las posiciones especificadas void swap(List list, int, int)

31 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

32

33 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

34 Solución – nuevamente el complilador trabaja por nosotros Nueva sintaxis del loop For (variable : Collection) Trabaja sobre colecciones y arrays

35 Viejo código (< J2SE5.0) void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ){ TimerTask task = (TimerTask)i.next(); task.cancel(); }

36 Nuevo código (J2SE5.0 !) void cancelAll(Collection c) { for (TimerTask task : c) task.cancel(); }

37 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

38 The Java Tutorial Trail de colecciones Thinking in Java, 3rd edition Bruce Eckel Bruce_Eckel's_Free_Electronic_Books.html Bruce_Eckel's_Free_Electronic_Books.html


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

Presentaciones similares


Anuncios Google