02 - Collezioni

235 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
235
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

02 - Collezioni

  1. 1. COLLEZIONI E GENERICI Talk 2
  2. 2. COLLEZIONI
  3. 3. LE COLLEZIONI SONO STRUTTURE DATI• Programmare non è più solo scrivere algoritmi ma permettere a strutture dati diverse di interagire tra loro. • Unastruttura dati è un modo di organizzare informazioni per permetterne un uso efficiente (Wikipedia).
  4. 4. 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.
  5. 5. 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.
  6. 6. COLLEZIONIInsieme Lista Mappa Stack Queue
  7. 7. DIGRESSIONE: LANOTAZIONE O(...)f(x) è O(g(x)) se esistono c > 0 e un x0 tali chef(x) < c g(x) per x > x0 1000000n^2 + 1000000n + 1000 è O(n^2)
  8. 8. 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).
  9. 9. LISTE• Collezione ordinata di elementi omogenei. • Permette la ricerca per indice. • Supporta elementi vuoti e duplicati.
  10. 10. 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).
  11. 11. LISTE CONCATENATE• Aggiunte velocissime O(1) e costanti. • Inserimenti e rimozioni lenti O(n). • Ricerche lente O(n). • Ricerche per indice lente O(n).
  12. 12. 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.
  13. 13. STACK• Variante della lista. • Realizza LIFO: push() e pop(). • Ambedue le operazioni sono O(1).
  14. 14. QUEUE• Variante della lista. • Realizza FIFO: add() e remove(). • Ambedue le operazioni sono O(1).
  15. 15. ABBIAMO VISTO• Complessità computazionale. • Varie collezioni.
  16. 16. GENERICI Syntactic sugar
  17. 17. 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);
  18. 18. IL PROBLEMA CRESCEList list = new List();!list.add(new Pippo());!Pippo pippo = (Pippo) list.get(0);!!//===================================!list.add(new Pluto());!Pippo pippo = (Pippo) list.get(1);
  19. 19. SOLUZIONEclass List<T> {! public void add(T obj) {! ...! }! public T get(int index) {! ...! }!}
  20. 20. SOLUZIONEList<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);
  21. 21. ESERCIZIO• Implementate una lista concatenata generica. Adesso.
  22. 22. DOMANDE? Prossima puntata: Iterazione e ricorsione. Stay tuned!

×