02 - collezioni
TRANSCRIPT
![Page 1: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/1.jpg)
COLLEZIONI E GENERICITalk 2
![Page 2: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/2.jpg)
COLLEZIONI
![Page 3: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/6.jpg)
COLLEZIONI
Insieme Lista Mappa Stack Queue
![Page 7: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/9.jpg)
LISTE
• Collezione ordinata di elementi omogenei.
• Permette la ricerca per indice.
• Supporta elementi vuoti e duplicati.
![Page 10: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/13.jpg)
STACK
• Variante della lista.
• Realizza LIFO: push() e pop().
• Ambedue le operazioni sono O(1).
![Page 14: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/14.jpg)
QUEUE
• Variante della lista.
• Realizza FIFO: add() e remove().
• Ambedue le operazioni sono O(1).
![Page 15: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/15.jpg)
ABBIAMO VISTO
• Complessità computazionale.
• Varie collezioni.
![Page 16: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/16.jpg)
GENERICISyntactic sugar
![Page 17: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/19.jpg)
SOLUZIONE
class List<T> {! public void add(T obj) {! ...! }! public T get(int index) {! ...! }!}
![Page 20: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/21.jpg)
ESERCIZIO
• Implementate una lista concatenata generica. Adesso.
![Page 22: 02 - Collezioni](https://reader033.vdocuments.site/reader033/viewer/2022052303/5557d632d8b42af2178b4dab/html5/thumbnails/22.jpg)
DOMANDE?
Prossima puntata: Iterazione e ricorsione. Stay tuned!