Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Programación Orientada a Objetos
Unidad 4 Colecciones Universidad de Chile Departamento de Ciencias de la Computación Profesor: Juan Claudio Navarro
2
Temario Generics Interfaces Implementaciones Ordenamiento Algoritmos
Collection List Set Queue Map Implementaciones Ordenamiento Algoritmos
3
Framework de Colecciones
Java provee un framework de colecciones en el paquete java.util, que contiene: Interfaces: tipos abstractos de datos que representan colecciones Implementaciones: implementaciones concretas de las interfaces Algoritmos: métodos que realizan cálculos útiles, como buscar y ordenar
4
Generics Generics permite parametrizar tipos de datos, lo que hace posible diseñar clases y métodos que difieren la especificación de uno o más tipos de datos hasta que la clase (o método) sea declarada e instanciada class ListaGenerica<T> { void agregar(T elemento) { ... } } class Prueba { void prueba() { ListaGenerica<Integer> lista1 = new ListaGenerica<Integer>(); lista1.agregar(5); lista1.agregar(45627); listaGenerica<Persona> lista2 = new ListaGenerica<Persona>(); lista2.agregar(new Persona(...)); ...
5
Interfaces El framework de colecciones de Java está basado contiene dos interfaces en la raíz de la jerarquía Collection: grupo de elementos ; permite agregar elementos a la colección y luego recorrerlos Map: objeto que asocia llaves y valores ; permite asociar objetos a llaves, y posteriormente obtener los objetos a partir de sus llaves
6
Interfaces
7
Implementaciones de Colecciones
8
Listas Listas v/s arreglos: Las listas crecen dinámicamente
El framework de colecciones provee métodos utilitarios: búsqueda, ordenamiento, etc. List<String> lista = new ArrayList<String>(); lista.add("Hola"); lista.add("A ver qué tal..."); lista.add("Chao!"); Collections.sort(lista); System.out.println(lista);
9
Comparación y Ordenamiento
Los elementos se ordenan en base a: su "orden natural", dado por su implementación de la interfaz Comparable una implementación de la interfaz Comparator entregada como parámetro a métodos de ordenamiento, o a constructores de colecciones ordenadas La interfaz Comparable<T>: El método compareTo(T o) retorna negativo, 0 o positivo, según si el objeto es menor, igual o mayor que el parámetro, respectivamente Muchas clases de la librería estándar implementan esta interfaz: las clases numéricas, String, Date, etc. La interfaz Comparator<T>: El método compare(T o1, T o2) retorna negativo, 0 o positivo, según si el parámetro o1 es menor, igual o mayor que el parámetro o2, respectivamente
10
Comparando Objetos Propios
Para comparar objetos propios, se debe implementar Comparable o Comparator class Persona implements Comparable<Persona> { private final String nombre; private final String apellido; public Persona(String nombre, String apellido) { this.nombre = nombre; this.apellido = apellido; } public String getNombre() { return nombre; } public String getApellido() { return apellido; } public int compareTo(Persona p) { int n = apellido.compareTo(p.apellido); return n != 0 ? n : nombre.compareTo(p.nombre); public String toString() { return apellido + ", " + nombre; }
11
Comparando Objetos Propios
public class PruebaOrdenamiento { public static void main(String[] args) { List<Persona> personas = new ArrayList<Persona>(); personas.add(new Persona("Sergio", "González")); personas.add(new Persona("Carolina", "Alvarez")); personas.add(new Persona("Andrea", "González")); personas.add(new Persona("Patricio", "Sotomayor")); Collections.sort(personas); System.out.println(personas); }
12
Implementaciones de List y Set
La interfaz List Provee manejo posicional Existen dos implementaciones principales ArrayList: en general, tiene mejor desempeño, tiene tiempo constante de acceso a los datos LinkedList: puede ser mejor que ArrayList cuando se insertan muchos elementos por el comienzo, o cuando se itera y se eliminan elementos al interior La interfaz Set No permite elementos duplicados HashSet: no ordena los elementos TreeSet: provee ordenamiento (implementa SortedSet), basado en el "orden natural" de los elementos (implementación de Comparable), o en el orden definido por una implementación de Comparator entregada como parámetro en el constructor
13
La Interfaz Iterator Un Iterator es un objeto que permite recorrer un Collection public interface Iterator { boolean hasNext(); Object next(); void remove(); // opcional } Ejemplo: un filtro static void filter(Collection c) { Iterator i = c.iterator(); while (i.hasNext()) if (!cond(i.next())) i.remove();
14
Maps Un Map asocia llaves a valores
Un Map no permite llaves duplicadas Operaciones principales: put(K llave, V valor): agrega un par (llave, valor) V get(K llave): obtiene el valor asociado a una llave Set<K> keySet(): retorna el conjunto de llaves Collection<V> values(): retorna la colección de valores Set<Map.Entry<K,V>> entrySet(): retorna el conjunto de pares Implementaciones principales HashMap: almacena los elementos en un hash table, y tiene el mejor desempeño TreeMap: almacena los elementos ordenados ascendentemente por sus llaves; el ordenamiento puede estar basado en el "orden natural", o en un Comparator particular, al igual que en TreeSet
15
Implementaciones de Map
16
Uso de Map Agregando y recuperando información:
Map<String,String> map = new HashMap<String,String>(); map.put("hola", "Buenos días"); map.put("chao", "Hasta pronto"); System.out.println(map.get("hola")); System.out.println(map.get("chao")); Iterando sobre las llaves: for (Object key : map.keySet()) System.out.println(key); Iterando sobre los valores: for (Object value : map.values()) System.out.println(value); Iterando sobre los pares {llave,valor}: System.out.println(key + " - " + map.get(key));
17
Algoritmos Java provee un conjunto de algoritmos polimórficos en la clase Collections: binarySearch(), copy(), fill(), max(), min(), replaceAll(), reverse(), rotate(), shuffle(), sort(), swap() La mayoría opera sobre objetos de tipo List, pero algunos (min y max) operan sobre objetos Collection
18
Implementaciones “Wrapper”
Implementaciones “wrapper” delegan el trabajo a la colección especificada, y agregan funcionalidad extra La clase Collections provee métodos static para crear colecciones sincronizadas e inmutables public class Collections { public static Collection synchronizedCollection(Collection c); public static Set synchronizedSet(Set s); public static List synchronizedList(List list); public static Map synchronizedMap(Map m); public static SortedSet synchronizedSortedSet(SortedSet s); public static SortedMap synchronizedSortedMap(SortedMap m); ... public static Set unmodifiableSet(Set s); public static List unmodifiableList(List list); public static Map unmodifiableMap(Map m); public static SortedSet unmodifiableSortedSet(SortedSet s); public static SortedMap unmodifiableSortedMap(SortedMap m); }
19
LINQ (.NET) .NET incluye una librería de colecciones similar a la de Java Language-Integrated Query (LINQ) permite construir y ejecutar queries que operan sobre diferentes fuentes de datos: colecciones, bases de datos, datasets de ADO.NET, documentos XML, etc.
20
Ejemplos LINQ Un ejemplo simple Obteniendo un valor “singleton”
Recorriendo objetos de una estructura de datos
21
Resumen Interfaces principales: Collection, List, Set, Queue, Map
Es posible agregar (add()) elementos a un Collection, y luego recorrerlos (iterator()) Un Map permite asociar valores a llaves (put()), y luego obtener el valor asociado a una llave (get()) Las colecciones soportan el "ordenamiento natural" de los elementos, y ordenamientos particulares definidos como implementaciones de la interfaz Comparator La clase Collections provee un conjunto de algoritmos polimórficos (ordenamiento, búsqueda, etc.), y métodos para generar colecciones inmutables y sincronizadas
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.