La Clase de Collections

Preview:

Citation preview

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