02 - Collezioni

22
COLLEZIONI E GENERICI Talk 2

Transcript of 02 - Collezioni

Page 1: 02 - Collezioni

COLLEZIONI E GENERICITalk 2

Page 2: 02 - Collezioni

COLLEZIONI

Page 3: 02 - Collezioni

LE COLLEZIONI SONO STRUTTURE DATI

• Programmare non è più solo scrivere algoritmi ma permettere a strutture dati diverse di interagire tra loro.

• Una struttura dati è un modo di organizzare informazioni per permetterne un uso efficiente (Wikipedia).

Page 4: 02 - Collezioni

ORGANIZZARE INFORMAZIONI

• Singnifica dare ai miei dati una struttura. Dipende da come sono fatti.

• Dipende da cosa devo farci!

• Insiemi lineari: per un accesso casuale a dati omogenei.

• Mappe: per creare associazioni tra chiavi e valori.

• Alberi: per gestire strutture ricorsive.

• Code: first-in, first-out.

• Stack: last-in, first-out.

Page 5: 02 - Collezioni

STRUTTURE DATI NELLA VITA VERA

• L’elenco del telefono è un dizionario.

• Il vocabolario è un dizionario.

• Gli indici delle Pagine Gialle formano un albero.

• Il cestone dei giochi è uno stack.

• Al semaforo c’è la coda.

Page 6: 02 - Collezioni

COLLEZIONI

Insieme Lista Mappa Stack Queue

Page 7: 02 - Collezioni

DIGRESSIONE: LA NOTAZIONE O(...)

f(x) è O(g(x)) se esistono c > 0 e un x0 tali che f(x) < c g(x) per x > x0

1000000n^2 + 1000000n + 1000 è O(n^2)

Page 8: 02 - Collezioni

INSIEMI - SET

• Una collezione non ordinata di elementi omogenei.

• Non ha senso la ricerca per indice.

• Non contiene duplicati.

• Inserimenti e rimozioni lenti O(log n), ricerche veloci O(log n).

Page 9: 02 - Collezioni

LISTE

• Collezione ordinata di elementi omogenei.

• Permette la ricerca per indice.

• Supporta elementi vuoti e duplicati.

Page 10: 02 - Collezioni

LISTE BASATE SU ARRAY

• Aggiunte velocissime O(1) a meno che non sia necessario ingrandire la lista (richiede la duplicazione dell’array).

• Inserimenti e rimozioni lentissimi (richiede la duplicazione dell’array).

• Ricerche lentissime O(n).

• Ricerche per indice velocissime O(1).

Page 11: 02 - Collezioni

LISTE CONCATENATE

• Aggiunte velocissime O(1) e costanti.

• Inserimenti e rimozioni lenti O(n).

• Ricerche lente O(n).

• Ricerche per indice lente O(n).

Page 12: 02 - Collezioni

MAPPE

• È un insieme di coppie chiave-valore.

• Ricerca per chiave veloce O(log n).

• Ricerca per valore impossibile.

• Non permette chiavi vuote o duplicate.

• Permette valori vuoti o duplicati.

Page 13: 02 - Collezioni

STACK

• Variante della lista.

• Realizza LIFO: push() e pop().

• Ambedue le operazioni sono O(1).

Page 14: 02 - Collezioni

QUEUE

• Variante della lista.

• Realizza FIFO: add() e remove().

• Ambedue le operazioni sono O(1).

Page 15: 02 - Collezioni

ABBIAMO VISTO

• Complessità computazionale.

• Varie collezioni.

Page 16: 02 - Collezioni

GENERICISyntactic sugar

Page 17: 02 - Collezioni

PROBLEMAclass List {! public void add(Object obj) {! ...! }! public Object get(int index) {! ...! }!}!!//==============================!List list = new List();!list.add(new Pippo());!!Pippo pippo = list.get(0);

Pippo pippo = (Pippo) list.get(0);

Page 18: 02 - Collezioni

IL PROBLEMA CRESCE

List list = new List();!list.add(new Pippo());!Pippo pippo = (Pippo) list.get(0);!!//===================================!list.add(new Pluto());!Pippo pippo = (Pippo) list.get(1);

Page 19: 02 - Collezioni

SOLUZIONE

class List<T> {! public void add(T obj) {! ...! }! public T get(int index) {! ...! }!}

Page 20: 02 - Collezioni

SOLUZIONE

List<Pippo> list = new List<Pippo>();!list.add(new Pippo());!Pippo pippo = list.get(0);

list.add(new Pluto());

List<Pluto> list2 = new List<Pluto>();!list2.add(new Pluto());!Pluto pluto = list2.get(0);

Page 21: 02 - Collezioni

ESERCIZIO

• Implementate una lista concatenata generica. Adesso.

Page 22: 02 - Collezioni

DOMANDE?

Prossima puntata: Iterazione e ricorsione. Stay tuned!