33
04/27/22 CS2 - Java Collection Framewo rk 1 Java Collections Daniel Cohen

La Clase de Collections

Embed Size (px)

Citation preview

Page 1: La Clase de Collections

04/19/23 CS2 - Java Collection Framework 1

Java Collections

Daniel Cohen

Page 2: La Clase de Collections

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

Page 3: La Clase de Collections

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 …

Page 4: La Clase de Collections

04/19/23 CS2 - Java Collection Framework 4

Las interfaces

Page 5: La Clase de Collections

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.

Page 6: La Clase de Collections

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.

Page 7: La Clase de Collections

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.

Page 8: La Clase de Collections

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

Page 9: La Clase de Collections

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 …

Page 10: La Clase de Collections

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

Page 11: La Clase de Collections

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..

Page 12: La Clase de Collections

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.

Page 13: La Clase de Collections

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.

Page 14: La Clase de Collections

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

Page 15: La Clase de Collections

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.

Page 16: La Clase de Collections

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

Page 17: La Clase de Collections

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

Page 18: La Clase de Collections

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

Page 19: La Clase de Collections

04/19/23 CS2 - Java Collection Framework 19

Implementaciones

Interface Implementation Historical

Set HashSet TreeSet

List ArrayList LinkedList VectorStack

Map HashMap WeakHashMap TreeMap HashTableProperties

Page 20: La Clase de Collections

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.

Page 21: La Clase de Collections

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

Page 22: La Clase de Collections

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?

Page 23: La Clase de Collections

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

Page 24: La Clase de Collections

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

Page 25: La Clase de Collections

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.

Page 26: La Clase de Collections

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

Page 27: La Clase de Collections

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.

Page 28: La Clase de Collections

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.

Page 29: La Clase de Collections

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

Page 30: La Clase de Collections

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.

Page 31: La Clase de Collections

04/19/23 CS2 - Java Collection Framework 31

Uso del comparator

Por ejemplo en los constructores:

TreeMap(Comparator c) TreeSet(Comparator c)

Page 32: La Clase de Collections

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.

Page 33: La Clase de Collections

04/19/23 CS2 - Java Collection Framework 33

GRACIAS!!!!!!!!