© M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 Collezioni di dati in Java.

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
File System Cos’è un File System File e Directory
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Semantica Operazionale di un frammento di Java: lo stato
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Alberi binari di ricerca
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005.
Algoritmi e Strutture Dati IV. Heap e Code di Priorità
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
Algoritmi e Strutture Dati
Approfondimento delle classi
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Strutture di controllo in C -- Flow Chart --
Java Collections.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di Informatica di base
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Namespaces 1. Utilizzati per contenere tipi (classi, strutture, interfacce … ) ed altri namespaces La Class Library è organizzata gerarchicamente mediante.
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
1 Questionario di soddisfazione ATA - a. sc. 2008/09 Il questionario è stato somministrato nel mese di aprile Sono stati restituiti 29 questionari.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A GESTIONE DEL TESTO.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
1 Un esempio con iteratore: le liste ordinate di interi.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterarare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Gerarchie e polimorfismo: liste. 2 Generalizzare le liste di interi  List 4 lista di oggetti –non modificabile 4 vorremo poi definire un sottotipo.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercizi iteratori. Matrice import java.util.Iterator; public class MatrixIterator implements Iterator { private Matrix matrix; private int currentRow.
1 Un esempio con iteratore: le liste ordinate di interi.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (II parte)
Collezioni in Java. Collection Framework JFC Java Collection Framework (JCF) fornisce il supporto a qualunque tipo di struttura dati, nel quadro di un'architettura.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Transcript della presentazione:

© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A Collezioni di dati in Java

2 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Introduzione Spesso un programma ha la necessità di memorizzare insiemi di dati tra loro variamente strutturati Il package java.util mette a disposizione modelli concettuali per organizzare i dati (sotto forma di interfacce) un certo numero di implementazioni concrete di tali modelli, ciascuno dotato di pregi e difetti

3 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Collection Interfaccia radice della gerarchia di ereditarietà Modella un gruppo di oggetti, dotato o meno di duplicati, dotato o meno di un ordine interno Di solito, non viene implementata direttamente (si implementano le sue sotto-interfacce) Non può contenere direttamente tipi elementari (interi, reali, caratteri, booleani) Due gruppi di metodi Accesso ai singoli elementi Modifica del contenuto

4 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Accedere agli elementi Iterator iterator() Restituisce un oggetto che consente di esaminare, ad uno ad uno, i singoli elementi contenuti Object[] toArray() Restituisce un array contenente i riferimenti a tutti i diversi elementi contenuti int size() Restituisce il numero di oggetti contenuti nella collezione boolean contains(Object o) Indica se nella è presente un elemento e che soddisfa la relazione e.equals(o) oppure, nel caso in cui o valga null, se la lista contiene un altro elemento nullo

5 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Modificare una collezione Insieme di operazioni elementari per aggiungere ed eliminare oggetti Le singole implementazioni possono implementarne il funzionamento o lanciare UnsupportedOperationException Inserimento boolean add(Object o) boolean addAll(Collection c) Cancellazione void clear() boolean remove(Object o) boolean removeAll(Collection c) boolean retainAll(Collection c)

6 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Operazioni sulle collezioni Collection c1,c2,c3,c4; //... //Aggiungo gli elementi di c2 a c1 c1.addAll(c2); //Elimino gli elementi presenti in c3 c1.removeAll(c3); //Interseco c1 con c4 c1.retainAll(c4); Collection c1,c2,c3,c4; //... //Aggiungo gli elementi di c2 a c1 c1.addAll(c2); //Elimino gli elementi presenti in c3 c1.removeAll(c3); //Interseco c1 con c4 c1.retainAll(c4);

7 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Gerarchia di ereditarietà Collection List Set Map SortedSet Iterator ListIterator estende dà origine a

8 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.List (1) Collezione ordinata Può contenere duplicati e/o elementi nulli Permette laccesso agli elementi contenuti anche in base alla loro posizione Estende il concetto di iteratore (ListIterator) per garantire un accesso efficiente alla sequenza contenuta Accesso agli elementi ListIterator listIterator() ListIterator listIterator(int index) Object get(int index) int indexOf(Object o) List subList(int fromIndex, int toIndex)

9 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.List (2) Modificare gli elementi void add(int index, Object o) void addAll(int index, Collection c) Object remove(int index) Object set(int index, Object o)

10 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Set Collezione priva di duplicati Modella il concetto matematico di insieme Aggiunge solo vincoli su quali oggetti siano inseribili e sulla semantica delle operazioni Non ha operazioni differenti rispetto a Collection SortedSet: estende il concetto di insieme Il suo iteratore permette di visitare i singoli elementi in ordine lessicografico (o nellordine definito da un oggetto di tipo java.util.Comparator)

11 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Map (1) Modella il concetto di relazione iniettiva tra due insiemi di oggetti, detti rispettivamente chiavi e valori La mappa associa, ad ogni chiave, uno ed un solo valore La chiave dovrebbe essere un oggetto immutabile In base alle implementazioni, può essere lecito o meno che chiavi e valori valgano null

12 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Map (2) k2k1k3k4k5k6v1v2v3v4v5 Chiavi Valori Mappa

13 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Operazioni su una mappa Accesso agli elementi Object get(Object key) boolean containsKey(Object key) boolean containsValue(Object value) Accesso agli insiemi Set entrySet() Set keySet() Collection values() boolean isEmpty() int size()

14 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Elementi di una mappa Map map; //... Iterator it = map.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); //... } Map map; //... Iterator it = map.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); //... } Map map; //... Iterator it = map.values().iterator(); while (it.hasNext()) { Object value = it.next(); //... } Map map; //... Iterator it = map.values().iterator(); while (it.hasNext()) { Object value = it.next(); //... }

15 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Coppie di una mappa Map map; //... Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry= (Map.Entry) it.next(); Object key = entry.getKey(); Object value = entry.getValue(); //... } Map map; //... Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry= (Map.Entry) it.next(); Object key = entry.getKey(); Object value = entry.getValue(); //... }

16 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Iterator (1) Modella il concetto di visita (eventualmente distruttiva) di una collezione Permette di esaminare uno alla volta i singoli elementi appartenenti, supportando il concetto di eliminazione del singolo elemento Sostituisce la classe java.util.Enumeration che non definisce una semantica per leliminazione Metodi boolean hasNext() Object next() void remove()

17 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Iterator (2) Può essere immaginato come un indice posto tra due elementi consecutivi Allatto della costruzione, si trova prima del primo elemento La chiamata a next() provoca lavanzamento alla posizione successiva (se esiste) o la generazione di uneccezione remove() elimina lultimo elemento restituito (quello che precede il puntatore, se esiste) o1o2o3

18 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Elementi di una collezione Collection c; //... Iterator it = c.iterator(); while (it.hasNext() ) { Object element = it.next(); //... } Collection c; //... Iterator it = c.iterator(); while (it.hasNext() ) { Object element = it.next(); //... }

19 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.ListIterator (1) Estende il concetto di Iterator, permettendo la visita in entrambe le direzioni Oltre alla visita ed alleliminazione, può permettere le operazioni di inserimento e sostituzione Nel caso in cui si visiti una lista alternando le direzioni (procedendo avanti ed indietro) allatto del cambio viene ritornato lo stesso elemento due volte consecutive o1o2o3 next() previous()

20 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.ListIterator (2) Metodi supportati void add(Object o) boolean hasNext() boolean hasPrevious() Object next() int nextIndex() Object previous() int previousIndex() void remove() void set(Object o)

21 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Implementazioni Allinterno del package java.util sono presenti un certo numero di classi che implementano le interfacce precedenti Una data interfaccia può essere implementata da più classi, con algoritmi differenti A parità di comportamento funzionale, le prestazioni possono essere sensibilmente differenti Per generalità, le variabili di tipo collezione, si dichiarano come appartenenti alla relativa interfaccia e si fa riferimento alla classe concreta solo allatto della costruzione: List l = new LinkedList(); Per lo più, le implementazioni non sono sincronizzate

22 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Principali classi (1) LinkedList Rappresenta una lista doppiamente collegata Oltre alle funzionalità base definite da List, offre metodi per linserimento e la cancellazione di elementi in testa ed in coda (implementazione di pile e code) I tempi di accesso al singolo elemento interno crescono al crescere della dimensione ArrayList Lista basata su un array dinamicamente riallocato Ha tempi di accesso ad un elemento arbitrario costanti ma tempi di inserimento proporzionali al numero di elementi da spostare

23 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Principali classi (2) HashSet Implementa il concetto di insieme appoggiandosi su una tabella hash Ha tempi di inserimento, cancellazione, accesso mediamente costanti Presuppone che gli oggetti inseriti dispongano di unimplementazione adeguata dei metodi int hashCode() e boolean equals(Object o) definiti nella classe Object

24 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Principali classi (3) HashMap Implementa il concetto di mappa appoggiandosi su una tabella hash Ha tempi costanti per le operazioni base (get e put), ma literazione sugli elementi richiede un tempo proporzionale alla dimensione Due fattori influenzano le prestazioni e di cui si dovrebbe tener conto allatto della creazione: oCapacità iniziale: numero di elementi previsti nella tabella di hash oFattore di carico: indica la percentuale massima di elementi occupati prima che la capacità sia incrementata automaticamente (operazione di rehash)

25 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Collections (1) Fornisce un insieme di metodi statici di utilità per la gestione delle collezioni Ricerca binaria, ordinamento, copia di una intera lista, ritrovamento del elemento minimo o massimo, sostituzione di un elemento, … static int binarySearch(…) static void sort(…) static void copy(List dest, List src) static void fill(List list, Object obj) static Object max(…) static Object min(…) static boolean replaceAll(List list, Object old, Object new) …

26 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti java.util.Collections (2) Tutte le classi viste precedentemente non sono sincronizzate: Laccesso da parte di più thread deve essere gestito dal programmatore In alternativa si possono utilizzare i metodi forniti da Collections per la creazione di oggetti che incapsulano la sincronizzazione static Collection synchronizedCollection(Collection c) static List synchronizedList(List list) static Map synchronizedMap(Map m) static Set synchronizedSet(Set s) static SortedMap synchronizedSortedMap(SortedMap m) static SortedSet synchronizedSortedSet(SortedSet s) Modifiche concorrenti restituiscono leccezione ConcurrentModificationException

27 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Accesso sincronizzato HashMap clear()get() put(…) size() … values() clear() get() put(…) size() … values() Map m1=new HashMap(); Map m2=Collections.synchronizedMap(m1);

28 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Accesso in sola lettura (1) Collections mette a disposizione un insieme di metodi che rendono loggetto non modificabile: static Collection unmodifiableCollection(Collection c) static List unmodifiableList(List list) static Map unmodifiableMap(Map m) static Set unmodifiableSet(Set s) static SortedMap unmodifiableSortedMap(SortedMap m) static SortedSet unmodifiableSortedSet(SortedSet s) Un eventuale tentativo di modifica genera leccezione UnsuppotedOperationException

29 © M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti Accesso in sola lettura (2) HashMap UnmodifiableMap size()get() put(…) clear() … values() size() get() put(…) clear() … values()