La Clase de Collections
-
Upload
paula740003 -
Category
Documents
-
view
14 -
download
3
Transcript of La Clase de Collections
04/19/23 CS2 - Java Collection Framework 1
Java Collections
Daniel Cohen
04/19/23 CS2 - Java Collection Framework 2
Collections
Las colecciones (a veces llamadas contendores) son objetos que agrupan múltiples elementos en una sola unidad.
Las colecciones son usadas para almacenar, recuperar y transmitir datos desde un método a otro.
Las colecciones usualmente representan un datos que pertenecen a un mismo grupo natural (o “clase de equivalencia”)
04/19/23 CS2 - Java Collection Framework 3
Java Collections Framework
Java collections framework esta compuesto de un grupo de interfaces y clases para trabajar con grupos de objetos.
Java Collections Framework: Interfaces. Implementaciones. Algoritmos: métodos para buscar, ordenar …
04/19/23 CS2 - Java Collection Framework 4
Las interfaces
04/19/23 CS2 - Java Collection Framework 5
Sets Un grupo de ítems en el cual no hay
duplicados. En español “conjunto” Ejemplos
Letras de la A a la Z Números no negativos { 0, 1, 2, … } Conjunto vacío {} Los estudiantes de esta clase
Fundamental: Contienen una sola instancia del ítem. El orden puede ser irrelevante.
04/19/23 CS2 - Java Collection Framework 6
Listas
Los elementos en la lista están ordenados. Por orden de inserción. Por algún atributo.
Una lista puede contener elementos duplicados.
04/19/23 CS2 - Java Collection Framework 7
Map
El MAP es un conjunto de pares. Cada par representa una relación unidireccional
entre un objeto (la clave) y otro (el valor). Ejemplos
Un MAP con ID de empleados y los registros de empleados
Diccionario: palabra-significado. La guía telefónica.
04/19/23 CS2 - Java Collection Framework 8
Collections, Maps …La diferencia
Collections Agregar, remover, buscar un ítem.
Maps Las mismas operaciones que en
Collections están disponibles, pero no operan sobre un objeto, sino sobre 2 (la pareja).
04/19/23 CS2 - Java Collection Framework 9
Set extiende Collection pero prohíbe duplicados
List extiende colección Collection, permite duplicados y posicionamiento mediante índice.
MAP no extiende Collection.
Recordando …
04/19/23 CS2 - Java Collection Framework 10
Collection Interface
Esta en el paquete java.util
Los métodos opcionales lanzanUnsupportedOperationExceptionSi la clase que implementa no soporta la operación
Existen operaciones masivas Para usar sobre una colección entera
El método toArray devuelve la colecciónComo un array.
// Basic Operationssize():int; isEmpty():boolean; contains(Object):boolean; add(Object):boolean; // Optional remove(Object):boolean; // Optionaliterator():Iterator;
// Bulk Operations containsAll(Collection):boolean; addAll(Collection):boolean; // OptionalremoveAll(Collection):boolean; // Optional retainAll(Collecton):boolean; // Optional clear():void; // Optional
// Array Operations toArray():Object[]; toArray(Object[]):Object[];
Collection
04/19/23 CS2 - Java Collection Framework 11
Set Interface
Extiende de colección. No agrega ningún método. 2 sets son iguales si contienen los
mismos elementos..
04/19/23 CS2 - Java Collection Framework 12
Set. Operaciones masivas.
s1.containsAll(s2): true si s2 es un subconjunto de s1.
s1.addAll(s2): transforma a s1 en la union de s1 y s2.
s1.retainAll(s2): transforma a s1 en la intersección entre s1 y s2.
04/19/23 CS2 - Java Collection Framework 13
Lists
La lista es una collection ordenada . Además de todas las operaciones
de una collection, agrega métodos para: Acceso posicional. Búsqueda. Iteración. Vista de rangos.
04/19/23 CS2 - Java Collection Framework 14
List Interface
// Positional Access get(int):Object; set(int,Object):Object; // Optionaladd(int, Object):void; // Optionalremove(int index):Object; // Optional addAll(int, Collection):boolean; // Optional
// Search int indexOf(Object); int lastIndexOf(Object);
// Iteration listIterator():ListIterator; listIterator(int):ListIterator;
// Range-view List subList(int, int):List;
List
04/19/23 CS2 - Java Collection Framework 15
Maps
Acceder a un MAP es distinto Un Map no es una Collection.
La interfaz MAP provee métodos para guardar y acceder tanto a las key como los values.
04/19/23 CS2 - Java Collection Framework 16
Map Interface
// Basic Operations put(Object, Object):Object; get(Object):Object; remove(Object):Object; containsKey(Object):boolean; containsValue(Object):boolean; size():int; isEmpty():boolean;
// Bulk Operations void putAll(Map t):void; void clear():void;
// Collection Views keySet():Set; values():Collection; entrySet():Set;
Map
getKey():Object; getValue():Object; setValue(Object):Object;
EntrySet
04/19/23 CS2 - Java Collection Framework 17
Iterator
Es la aplicación de un patrón.
Permite recorrer una lista de elementos, sin importar cual es la estructura subyacente.
Es una interfase.
hasNext():boolean; next():Object; remove():void;
Iterator
04/19/23 CS2 - Java Collection Framework 18
ListIterator
ListIterator extiende iterator.
Hacia adelante y hacia atrás.
ListIterator es muy útil con LinkedList.
hasNext():boolean; next():Object;
hasPrevious():boolean;previous(): Object;
nextIndex(): int;previousIndex(): int;
remove():void; set(Object o): void;add(Object o): void;
ListIterator
04/19/23 CS2 - Java Collection Framework 19
Implementaciones
Interface Implementation Historical
Set HashSet TreeSet
List ArrayList LinkedList VectorStack
Map HashMap WeakHashMap TreeMap HashTableProperties
04/19/23 CS2 - Java Collection Framework 20
Diferencias entre implementaciones.
LinkedList vs Arraylist: linked list es una lista doblemente enlazada y contiene métodos para agregar tanto al principio como al final. ArrayList es una lista sencilla.
HashSet vs Treeset: en el tree set los elementos se guardan en el orden natural.
Hashmap vs Treemap: orden natural nuevamente.
WeakHashMap: para guardar referencias debiles.
04/19/23 CS2 - Java Collection Framework 21
Elegir una implementación.
Depende de nuestro problema. Velocidad? Acceso aleatorio? Acceso por el orden natural? Ver javadoc:
http://java.sun.com/j2se/1.4.2/docs/api/overview-summary.html
04/19/23 CS2 - Java Collection Framework 22
Arraylist import java.util.*;
public class Main { public static void main(String[] args) { List lista = new ArrayList(); lista.add("hola"); lista.add("que"); lista.add("tal?"); Iterator it = lista.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } }
Resultado:
holaquetal?
04/19/23 CS2 - Java Collection Framework 23
HashSet
import java.util.*; public class ConSets { public static void main(String[] args) { Set palabras = new HashSet(); palabras.add("z"); palabras.add("l"); palabras.add("a"); Iterator it = palabras.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } }
Resultado:
zal
04/19/23 CS2 - Java Collection Framework 24
TreeSet
import java.util.*; public class ConTreeSet { public static void main(String[] args) { Set palabras = new TreeSet(); palabras.add("z"); palabras.add("l"); palabras.add("a"); Iterator it = palabras.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } }
Resultado:
alz
04/19/23 CS2 - Java Collection Framework 25
Y que hay con nuestros objetos?
El framework de Collections funciona con cualquier clase java.
Puede ser necesario redefinir: equals() hashCode() compareTo()
No usar objetos mutables como claves de un MAP.
04/19/23 CS2 - Java Collection Framework 26
Interface Comparable
Orden natural: 1 < 2 < 5 < 6
A < B New Persona(“JUAN”,4) con respecto a new
Persona(“Pedro” ,5)?????????
Implementar la interfaz Comparable.
Un único método: int compareTo(Object o)
Importante: el orden natural debe ser consistente con el equals. Si e1.equals(e2), --- e1.compareTo(e2)==0
Cero si son iguales. Un entero positivo si e1 < e2.La operación debe ser transitiva. Si e1<e2 y e2<e3, entonces e1<e3
04/19/23 CS2 - Java Collection Framework 27
hashCode()
hashCode() devuelve valores enteros que son usados para determinar la ubicación en los maps. Si 2 objetos son iguales (equals()), entonces
tienen el mismo hashcode. Durante la ejecución de un programa,
hashcode retornara siempre lo mismo no importa cuantas veces sea invocada sobre el mismo objeto.
Pero: si 2 objetos son distintos (equals()) no es necesario que su hashcode sea distinto.
04/19/23 CS2 - Java Collection Framework 28
Comparator Interface
Si una colección debe ser ordenada en de una forma diferente del “orden natural”, construir un objeto comparador y darlo en a la colección para que lo use
Por ejemplo: Ordenar la gente por edad, no por
nombre.
04/19/23 CS2 - Java Collection Framework 29
Comparator Interface
Esta en java.util Un solo método:
compare( Object o1, Object o2 ) devuelve:
Negativo si o1 < o2Cero si o1 == o2Positivo si o1 > o2
04/19/23 CS2 - Java Collection Framework 30
Ejemplo de comparator:
import java.util.*;
public class CaseInsensitiveComparator implements Comparator {
public int compare( Object one, Object two ) { String stringOne = (String) one; String stringTwo = (String) two;
// Shift both strings to lower case, and then use the // usual String instance method compareTo() return stringOne.toLowerCase().compareTo( stringTwo.toLowerCase() ); }
}
Comparar 2 Strings sin importar mayúsculas o minúsculas.
04/19/23 CS2 - Java Collection Framework 31
Uso del comparator
Por ejemplo en los constructores:
TreeMap(Comparator c) TreeSet(Comparator c)
04/19/23 CS2 - Java Collection Framework 32
Clase Collections
Solo métodos estáticos. Todos métodos útiles para
Ordenar Reemplazar Buscar máximos / mínimos Copiar Reemplazar Revertir Búsquedas binarias Todos los métodos que no entraron en otras
clases.
04/19/23 CS2 - Java Collection Framework 33
GRACIAS!!!!!!!!