Programmazione con Java: Collection Framework 2

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione con Java: Collection Framework 2"

Transcript

1 Programmazione con Java Collection Framework Daniela Micucci Introduzione Una collezione a volte chiamata container è un elemento contenitore di oggetti chiamati elementi La necessità di strutture dati che raggruppino oggetti è comune a molte applicazioni Ad esempio: mail folder (collezione di mail), rubriche (collezione di associazioni nome numero di telefono)... Programmazione con Java: Collection Framework 2 1

2 Java Collection Framework È un insieme di interfacce e di classi che supportano tre tipi di collezioni: Insiemi Collezioni di elementi che non ammettono duplicati Liste Collezioni ordinate di elementi Chiamate anche sequenze Mappe Collezione di coppie <chiave, valore> Il valore è quindi l elemento La chiave è usata per inserire l elemento e per recuperare l elemento Le chiavi non ammettono duplicati Le mappe sono anche chiamate dizionari Programmazione con Java: Collection Framework 3 Java Collection Framework Il Java Java Collection Framework contiene Un insieme di interfacce (e classi astratte) che specificano un insieme di funzionalità Un insieme vasto di collezioni già implementate che realizzano liste, insiemi e mappe Diverse implementazioni per ciascuna tipologia di collezione Le strutture dati sono contenitori generici per gli oggetti Fino alla versione 1.4 si usava la classe Object Dalla versione 1.5 è stato aggiunto il supporto ai generici Programmazione con Java: Collection Framework 4 2

3 Organizzazione Liste e Insiemi: implementano l interface Collection<E> Mappe: implementano l interface Map<K,V> Collection Map Set List AbstractCollection SortedMap AbstractMap SortedSet AbstractSet AbstractList AbstractSequentialList Set - Insiemi List - Liste Map - Mappe TreeSet HashSet Vector ArrayList LinkedList TreeMap HashMap Programmazione con Java: Collection Framework 5 L interface Collection<E> L interfaccia Collection<E> specifica le operazioni di base che tutte le collezioni di elementi devono implementare (Liste e Insiemi) Nonostante non sia espressamente richiesto dall interfaccia, qualunque classe che implementi l interfaccia Collection<E> dovrebbe avere almeno due costruttori: Senza parametri e che crea un oggetto di tipo Collection<E> vuoto Con un parametro di tipo Collection<? extends E> che crea un oggetto di tipo Collection<E> contenente gli stessi elementi dell argomento Programmazione con Java: Collection Framework 6 3

4 L interface Collection<E> Programmazione con Java: Collection Framework 7 L interface Collection<E> I metodi opzionali devono comunque essere implementati Possono deviare dalla semantica attribuita Se deviano dalla semantica fornendo una implementazione triviale, devono generare una UnsupportedOperationException Se, per qualche motivo, non si è interessati a definire un implementazione vera e propria Una UnsupportedOperationException è una RunTimeException e quindi non è necessario gestirla o dichiararla in una clausola throws Programmazione con Java: Collection Framework 8 4

5 Insiemi: l interface Set<E> Insieme: collezione di elementi che non ammette duplicati L interface Set<E> definisce le operazioni che un insieme in quanto tale deve offrire Per evitare che esistano duplicati all interno della collezione, l interface Set<E> cambia la semantica di alcuni metodi ereditati da Collection<E> Due elementi e1 e e2 sono considerati duplicati e quindi non possono appartenere allo stesso set se e solo se e1.equals(e2) == true Non ha bisogno di definire ulteriori operazioni Programmazione con Java: Collection Framework 9 Insiemi: l interface Set<E> Programmazione con Java: Collection Framework 10 5

6 Liste: l interface List<E> Lista: collezione ordinata di elementi anche duplicati L interface List<E> definisce le operazioni che una lista in quanto tale deve offrire L interface List<E> cambia la semantica di alcuni metodi ereditati da Collection<E> Aggiunge nuovi metodi in modo da poter gestire l indicizzazione degli elementi (e quindi l ordinamento) Avere un accesso posizionale agli elementi Tramite indice intero che parte da 0 Ricercare un elemento e ottenere la sua posizione Eseguire operazioni in un determinato intervallo di List Programmazione con Java: Collection Framework 11 Liste: l interface List<E> Programmazione con Java: Collection Framework 12 6

7 Liste: l interface List<E> Programmazione con Java: Collection Framework 13 Mappe: l interface Map<K,V> Mappa: collezione di coppie <chiave, valore> con chiavi non duplicate L interface Map<K,V> definisce le operazioni che una mappa in quanto tale deve offrire I metodi di aggiunta coppie devono verificare che la chiave della nuova coppia non sia già presente nella mappa Ogni chiave può mappare al massimo un valore Una chiave k1 è considerata duplicata se containskeys(k1) restituisce true Il che vuol dire che esiste una chiave k2 tale che k2.equals(k1) == true Programmazione con Java: Collection Framework 14 7

8 Mappe: l interface Map<K,V> Nonostante non sia espressamente richiesto dall interfaccia, qualunque classe che implementi l interfaccia Map<K,V> dovrebbe avere almeno due costruttori: Senza parametri e che crea un oggetto di tipo Map<K,V> vuoto Con un parametro di tipo Map<K,V> che crea un oggetto di tipo Map<K,V> contenente gli stessi elementi dell argomento Definisce almeno i metodi per Inserire elementi con chiave Recuperare/rimuovere gli elementi tramite chiave Verificare se una chiave è già presente Recuperare tutte le chiavi/valori Programmazione con Java: Collection Framework 15 Mappe: l interface Map<K,V> Programmazione con Java: Collection Framework 16 8

9 Collezioni ordinate Le classi che implementano l interface List implicitamente definiscono una sequenza ordinata di elementi Map e Set sono collezioni non ordinate Per avere un ordinamento anche su mappe e insiemi, occorre che le implementazioni concrete derivino rispettivamente da SortedMap: è una Map che mantiene il collegamento chiave valore in ordine crescente di chiave SortedSet : è un Set che mantiene gli elementi in ordine crescente Programmazione con Java: Collection Framework 17 Interface SortedSet<E> È un Set che mantiene gli elementi ordinati in ordine crescente Gli insiemi ordinati sono utilizzati per realizzare insiemi naturalmente ordinati Una lista di parole Una lista di persone Gli elementi sono ordinati Secondo il loro ordine naturale o Mediante un Comparator (in genere fornito in fase di instanziazione del set) Set SortedSet TreeSet Collection Programmazione con Java: Collection Framework 18 9

10 Ordinamento naturale L ordinamento naturale, come dice la parola, è quello che uno si aspetta Banane, mele, pere, 1, 5, 23 12/05/2012, 01/06/2012, Dal punto di vista implementativo, un insieme di oggetti possono essere ordinati naturalmente se la classe che li definisce implementa l interface Comparable public interface Comparable<T> { public int compareto(t o); Programmazione con Java: Collection Framework 19 In metodo compareto Dati due oggetti o1 e o2 istanziati a partire da una classe che implementa l interface Comparable restituirà: o1.compareto(o2) 0 Se o1 e o2 sono uguali Intero negativo Se o1 è più piccolo di o2 Intero positivo Se o1 è più grande di o2 Programmazione con Java: Collection Framework 20 10

11 Esempio public class DemoCompare { public static void main(string a[]){ String s1 = new String("a"); String s2 = new String("b"); System.out.println(s1.compareTo(s2)); System.out.println(s2.compareTo(s1)); s2 = new String("a"); System.out.println(s1.compareTo(s2)); Output: Stessi risultati per altre classi predefinite come Date e Integer Programmazione con Java: Collection Framework 21 Esempio: classe personalizzata public class Persona implements Comparable<Persona> { private String cognome; private String nome; private String ; public Persona(String cognome, String nome, String ) { this.cognome = cognome; this.nome = nome; this. = public int compareto(persona altra) { int val = cognome.compareto(altra.cognome); if(val!= 0) return val; else return nome.compareto(altra.nome); Confronto solo su cognome e poi nome // Classe completa public class DemoComparable { public static void main(string a[]){ Persona p1 = new Persona("Rossi", "Mario", "rossi@mail.it"); Persona p2 = new Persona("Rossi", "Marco", "rossi1@mail.it"); System.out.println(p1.compareTo(p2)); //stampa 6 System.out.println(p2.compareTo(p1)); //stampa -6 p2 = new Persona("Rossi", "Mario", "pippo@mail.it"); System.out.println(p1.compareTo(p2)); //stampa 0 Programmazione con Java: Collection Framework 22 11

12 Coerenza ordinamento naturale/equals L ordinamento naturale per una classe C è detto essere coerente con l uguaglianza (equals) se e solo se ha lo stesso valore booleano di per ogni istanza e1 e e2 di C e1.compareto(e2) == 0 e1.equals(e2) È importante mantenere la coerenza poiché alcuni sorted set si comportano stranamente se non viene mantenuta la coerenza Un sorted set non ammette duplicati in termini di equals Si provi ad inserire in un sorted set due elementi a e b tali che (!a.equals(b) && a.compareto(b) == 0) Il secondo non viene inserito! Programmazione con Java: Collection Framework 23 Esempio: classe personalizzata Confronto solo su cognome e poi nome Classe completa public class Persona implements Comparable<Persona> { private String cognome; private String nome; private String ; public boolean equals(object obj) { // Persona other = (Persona) obj; if (cognome == null) { if (other.cognome!= null) return false; else if (!cognome.equals(other.cognome)) return false; if (nome == null) { if (other.nome!= null) return false; else if (!nome.equals(other.nome)) return false; return public int compareto(persona altra) { int val = cognome.compareto(altra.cognome); if(val!= 0) return val; else return nome.compareto(altra.nome); // Programmazione con Java: Collection Framework 24 12

13 Ordinamento mediante Comparator Se si vuole specificare un ordinamento diverso da quello naturale, si realizza un Comparator: Una interface che impone un ordinamento totale su una collezione di oggetti che è diverso da quello naturale public interface Comparator<T> { public int compare(t o1, T o2); // Stesso comportamento del metodo compareto Lo specifico in fase di instaziazione della collezione ordinata Esempio: TreeSet(Comparator<? super E> comparator) costruisce un nuovo set ordinato in accordo al comparator specificato Programmazione con Java: Collection Framework 25 Ordinamento mediante Comparator Se si vuole specificare un ordinamento diverso da quello naturale, si realizza un Comparator: Una interface che impone un ordinamento totale su una collezione di oggetti che è diverso da quello naturale public interface Comparator<T> { public int compare(t o1, T o2); // Stesso comportamento del metodo compareto Coerenza ordinamento/equals dovrebbe essere garantita Lo specifico in fase di instaziazione della collezione ordinata Esempio: TreeSet(Comparator<? super E> comparator) costruisce un nuovo set ordinato in accordo al comparator specificato Programmazione con Java: Collection Framework 26 13

14 Esempio Comparator Classe che implementa Comparator per confrontare due persone import java.util.comparator; public class ComparatorPersone implements Comparator<Persona> public int compare(persona o1, Persona o2) { int val = o1.getcognome().compareto(o2.getcognome()); if(val!= 0) return val; else return o1.getnome().compareto(o2.getnome()); Confronto solo su cognome e poi nome Programmazione con Java: Collection Framework 27 Interface SortedSet<E> Programmazione con Java: Collection Framework 28 14

15 Interface SortedMap<K,V> È una Map che mantiene le chiavi ordinate in ordine crescente Analoga a SortedSet Le mappe ordinate sono utilizzate per realizzare insiemi naturalmente ordinati di chiavi/valore Un dizionario Un elenco telefonico SortedMap Map Come per l interface SortedSet, le chiavi sono ordinate Secondo il loro ordine naturale o Mediante un Comparator (in genere fornito in fase di instanziazione della map) TreeMap Programmazione con Java: Collection Framework 29 Interface SortedMap<K,V> Programmazione con Java: Collection Framework 30 15

16 Implementazioni disponibili I tipi di collezioni possono essere implementati in diverse maniere Interface Hash table Implementazioni disponibili Array ridimensionabile Albero ordinato Liste concatenate Set HashSet TreeSet List ArrayList LinkedList Map HashMap TreeMap Programmazione con Java: Collection Framework 31 Caratteristiche delle implementazioni Le liste concatenate (o linked list) sono liste realizzate mediante puntatori Gli array ridimensionabile (o resizable array) sono liste realizzate tramite array di reference Gli alberi ordinati (o sorted tree ) sono alberi bilanciati ed ordinati realizzati mediante puntatori Le tabelle di hash (o hash table) sono tabelle realizzate mediante delle funzioni hash Vediamo le hash table cosa sono Programmazione con Java: Collection Framework 32 16

17 Hashing L'Hashing è la trasformazione di una stringa di caratteri in una sequenza di lunghezza fissa più breve denominata hash (o chiave) Una funzione di hash mappa quindi una stringa di lunghezza arbitraria in una stringa di lunghezza predefinita Il gatto Funzione di hash DM Il gatto mangia il topo Il gatto mangia il pesce Funzione di hash Funzione di hash 04LM DL08 L'Hashing è utilizzato per indicizzare e recuperare gli elementi di un database È più veloce trovare l elemento mediante una chiave più corta piuttosto che il suo valore originale Programmazione con Java: Collection Framework 33 Hash table Una hash table o hash map è una struttura dati che usa una funzione di hash per mettere in corrispondenza una data chiave (per esempio il nome di una persona) con un dato valore (ad esempio il suo numero di telefono) Di conseguenza, una hash table realizza un array associativo La funzione di hash è utilizzata per trasformare la chiave nell indice (l hash) di un array di elementi dove il valore corrispondente alla chiave sarà ricercato chiavi Mario Rossi Giorgio Bianchi Piero Verdi funzione di hash indice (o hash) valori Programmazione con Java: Collection Framework 34 17

18 Caratteristiche funzione di hash Collisione Due chiavi a cui viene calcolato lo stesso hash Fattore di carico (load factor) Calcolato come Celle libere/elementi presenti Quanta probabilità ha un nuovo elemento di collidere con uno già presente nella tabella È bene dunque mantenere il load factor il più basso possibile (di solito un valore di 0.75 è quello ottimale) per ridurre al minimo il numero di collisioni Programmazione con Java: Collection Framework 35 Implementazioni disponibili Come detto, esistono disponibili diverse implementazioni delle collezioni Ogni implementazione ha i suoi punti di forza o di debolezza rispetto alla struttura dati utilizzata Quando si deve selezionare un implementazione occorre appunto analizzarne proprio i pro/contro vediamone alcuni Programmazione con Java: Collection Framework 36 18

19 Set: esempi di implementazioni TreeSet<E> Conviene se si ha necessità di mantenere un ordinamento tra gli elementi L implementazione è simile ad un albero binario, che viene tenuto bilanciato in fase di inserimento Set Collection AbstractCollection HashSet<E> Gli elementi sono memorizzati in ordine sparso, senza alcuna garanzia sull ordine in cui potranno essere letti È implementata usando una hash table Conviene se si hanno prevalentemente accessi diretti agli elementi AbstractSet SortedSet Set - Insiemi TreeSet HashSet Programmazione con Java: Collection Framework 37 Liste: esempi di implementazioni ArrayList<E> È l implementazione più usata Conviene se si hanno prevalentemente accessi posizionali agli elementi (diretti) Vector<E> La prima collezione definita nel linguaggio Alternativa a ArrayList LinkedList<E> Lista linkata bidirezionale e permette di scorrere gli elementi partendo sia dall inizio che dalla fine Conviene se si hanno prevalentemente cancellazioni (veloce perché si cambiano solo i collegamenti fra nodi della lista Accedere all i esimo elemento è un operazione lenta infatti devono essere percorsi tutti gli elementi precedenti Collection Vector List AbstractList List - Liste ArrayList AbstractSequentialList LinkedList Programmazione con Java: Collection Framework 38 19

20 Mappe: implementazioni HashMap<K,V> conviene se si hanno accessi diretti agli elementi tempo di accesso costante Map TreeMap<K,V> conviene se si ha necessità di mantenere un ordinamento tra gli elementi tempo di accesso logaritmico SortedMap AbstractMap Map - Mappe TreeMap HashMap Programmazione con Java: Collection Framework 39 Tip #1 Le classi contengono metodi che specificano di lanciare numerose eccezioni Sono tutte comunque unchecked, utili per il debug In classi implementate possono essere viste come run time error Quando si codifica una collezione from scratch, occorre lanciare tutte le eccezioni che l interfaccia implementata dichiara di lanciare Programmazione con Java: Collection Framework 40 20

21 ITERATORI Programmazione con Java: Collection Framework 41 L interface Iterator Un iteratore è un oggetto che permette di effettuare una visita degli elementi di una collezione (qualsiasi classe che implementa Collection) Iterator è una interface così definita: public interface Iterator<E> { public boolean hasnext(); public E next(); public void remove(); //opzionale hasnaxt restituisce true se esiste un elemento successivo next si posiziona sull elemento successivo e lo restituisce remove rimuove l elemento attuale Programmazione con Java: Collection Framework 42 21

22 L interface Iterator Si ottiene un iteratore di una collezione invocando il suo metodo iterator() che restituisce un oggetto di tipo Iterator Hint: ogni volta che voglio iterare, devo farmi ridare l iteratore L interface Map non espone il metodo iterator() È possibile solo ottenere un iteratore per le chiavi e i valori keyset() che restituisce un Set values() che restituisce una Collection Programmazione con Java: Collection Framework 43 Esempio di utilizzo import java.util.arraylist; import java.util.iterator; public class Demo01 { public static void main(string[] args) { ArrayList<String> lista = new ArrayList<String>(); lista.add("uno"); lista.add("due"); Iterator<String> i = lista.iterator(); while(i.hasnext()){ String el = i.next(); System.out.println(el); i = lista.iterator(); i.next(); //rimuove l ultimo elemento restituito da next i.remove(); System.out.println(lista); Output: uno due [due] Programmazione con Java: Collection Framework 44 22

23 Iterator per le liste: ListIterator ListIterator estende Iterator e i metodi ereditati si comportano analogamente public interface ListIterator<E> extends Iterator<E>{ public boolean hasprevious(); public E previous(); public int nextindex(); public int previousindex(); public void set(e e); //opzionale public void add(e e); //opzionale hasprevious e previous sono analoghe a hasnext e next Le prime si riferiscono all elemento prima del cursore (implicito), le ultime all elemento dopo il cursore previous muove il cursore all indietro, next in avanti nextindex restituisce l indice dell elemento che sarebbe restituito dall invocazione della chiamata a next, perviousindex ad una chiamata a previous Programmazione con Java: Collection Framework 45 ESEMPI DI CLASSI Programmazione con Java: Collection Framework 46 23

24 Interface List: Esempio ArrayList import java.util.arraylist; import java.util.iterator; import java.util.list; public class DemoPersonaArrayList { public static void main(string a[]){ List<Persona> lista = new ArrayList<Persona>(); lista.add(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it")); lista.add(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it")); lista.add(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it")); lista.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); Iterator<Persona> i = lista.iterator(); while(i.hasnext()){ Persona el = i.next(); System.out.println(el); //Lo inserisce comunque in fondo anche se esiste gia' lista.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); System.out.println("Set nuovo: "); i = lista.iterator(); while(i.hasnext()) Output: System.out.println(i.next()); Persona [cognome=micucci, nome=daniela] Persona [cognome=denaro, nome=giovanni] Persona [cognome=tisato, nome=francesco] Set nuovo: Persona [cognome=micucci, nome=daniela] Persona [cognome=denaro, nome=giovanni] Persona [cognome=tisato, nome=francesco] Programmazione con Java: Collection Framework 47 Interface List: Esempio Vector import java.util.vector; import java.util.iterator; import java.util.list; public class DemoPersonaVector { public static void main(string a[]){ List<Persona> lista = new Vector<Persona>(); lista.add(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it")); lista.add(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it")); lista.add(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it")); lista.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); Iterator<Persona> i = lista.iterator(); while(i.hasnext()){ Persona el = i.next(); System.out.println(el); //Lo inserisce comunque in fondo anche se esiste gia' lista.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); System.out.println("Set nuovo: "); i = lista.iterator(); while(i.hasnext()) Output: System.out.println(i.next()); Persona [cognome=micucci, nome=daniela] Persona [cognome=denaro, nome=giovanni] Persona [cognome=tisato, nome=francesco] Set nuovo: Persona [cognome=micucci, nome=daniela] Persona [cognome=denaro, nome=giovanni] Persona [cognome=tisato, nome=francesco] Programmazione con Java: Collection Framework 48 24

25 Interface List: Esempio LinkedList import java.util.linkedlist; import java.util.listiterator; import java.util.list; public class DemoPersonaTreeMap { public static void main(string a[]){ List<Persona> lista = new LinkedList<Persona>(); lista.add(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it")); lista.add(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it")); lista.add(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it")); lista.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); ListIterator<Persona> i = lista.listiterator(); while(i.hasnext()){ Persona el = i.next(); System.out.println(i.next()); //Non devo riavvolgere l'iteratore --> i = lista.listiterator(); System.out.println("Set all indietro: "); while(i.hasprevious()){ Persona el = i.previous(); System.out.println(i.next()); Output: Persona [cognome=micucci, nome=daniela] //Lo inserisce comunque in fondo anche se esiste gia' Persona [cognome=denaro, nome=giovanni] lista.add(new Persona( Persona [cognome=tisato, nome=francesco] "Sartori", "Fabio", "sartori@disco.unimib.it")); Set all'indietro: Persona [cognome=tisato, nome=francesco] Persona [cognome=denaro, nome=giovanni] Persona [cognome=micucci, nome=daniela] Programmazione con Java: Collection Framework 49 Interface Set: Esempio TreeSet import java.util.treeset; import java.util.iterator; import java.util.set; public class DemoPersonaTreeSet { public static void main(string a[]){ Set<Persona> set = new TreeSet<Persona>(); set.add(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it")); set.add(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it")); set.add(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it")); set.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); Iterator<Persona> i = set.iterator(); while(i.hasnext()) System.out.println(i.next()); Elementi ordinati Elementi duplicati non presenti //Anche se fosse un omonimo, non lo farebbe inserire: è un Set set.add(new Persona("Sartori", "Fabio", "sartori1@disco.unimib.it")); //Lo inserisce dopo Denaro set.add(new Persona("Fiamberti", "Francesco", "fiamberti@disco.unimib.it")); System.out.println("Set nuovo: "); Output: i = set.iterator(); Persona [cognome=denaro, nome=giovanni] while(i.hasnext()) Persona [cognome=micucci, nome=daniela] System.out.println(i.next()); Persona [cognome=tisato, nome=francesco] Set nuovo: Persona [cognome=denaro, nome=giovanni] Persona [cognome=fiamberti, nome=francesco] Persona [cognome=micucci, nome=daniela] Persona [cognome=tisato, nome=francesco] Programmazione con Java: Collection Framework 50 25

26 Interface Set: Esempio HashSet HashSet utilizza una tabella di hash per memorizzare i suoi elementi Indicizza (i.e., calcola l hash) gli elementi applicando una funzione di hash sull elemento stesso da inserire La hash di ogni elemento da inserire viene calcolata invocando sull elemento stesso il metodo definito in Object (a meno di non averlo overridato) public int hashcode() Programmazione con Java: Collection Framework 51 Il metodo hashcode: specifiche per la sua implementazione Ogni volta che viene invocato sullo stesso oggetto, deve restituire sempre lo stesso valore A patto che l oggetto non abbia cambiato di stato Se due oggetti sono uguali secondo il metodo equals, l invocazione al metodo su ognuno dei due oggetti deve dare lo stesso valore Coerenza hashcode/equals Come abbiamo visto la coerenza ordinamento naturale/equals Il metodo hashcode definito in Object restituisce interi differenti per oggetti differenti È implementato convertendo l indirizzo di memoria dell oggetto in un intero Programmazione con Java: Collection Framework 52 26

27 Esempio con String La classe ha effettuato l override sia di equals che di hashcode garantendo la coerenza hashcode/equals public class DemoHashCode { public static void main(string[] args) { String s1 = new String("Ciao"); String s2 = new String("Ciao"); System.out.println(s1.equals(s2)); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); S1 == s2 false! Nonostante questo, hanno stesso hashcode e sono equals Output: true Programmazione con Java: Collection Framework 53 Esempio con classe Persona senza override La classe ha effettuato l override di equals, ma non di hashcode public class DemoHashCode { public static void main(string[] args) { Persona p1 = new Persona("Micucci", "Daniela", "micucci@disco.unimib.it"); Persona p2 = new Persona("Micucci", "Daniela", "daniela.micucci@unimib.it"); //abbiamo fatto override di equals che verifica nome e cognome System.out.println(p1.equals(p2)); //... ma non abbianmo fatto l'override di hashcode // ---> incoerenza hashcode/equals System.out.println(p1.hashCode()); System.out.println(p2.hashCode()); Output: true Programmazione con Java: Collection Framework 54 27

28 Esempio con classe Persona corretta Override di hashcode coerente con la def. di equals (solo nome e cognome) public class Persona implements Comparable<Persona> { public int hashcode() { final int prime = 31; int result = 1; result = prime * result + ((cognome == null)? 0 : cognome.hashcode()); result = prime * result + ((nome == null)? 0 : nome.hashcode()); return result; // public class DemoHashCode { public static void main(string[] args) { Persona p1 = new Persona("Micucci", "Daniela", "micucci@disco.unimib.it"); Persona p2 = new Persona("Micucci", "Daniela", "daniela.micucci@unimib.it"); //abbiamo fatto override di equals che verifica nome e cognome System.out.println(p1.equals(p2)); //... Con override di hashcode ---> coerenza hashcode/equals System.out.println(p1.hashCode()); System.out.println(p2.hashCode()); Output: true Programmazione con Java: Collection Framework 55 Interface Set: Esempio HashSet import java.util.hashset; import java.util.iterator; import java.util.set; public class DemoPersonaTreeSet { public static void main(string a[]){ Set<Persona> set = new HashSet<Persona>(); set.add(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it")); set.add(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it")); set.add(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it")); set.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); Iterator<Persona> i = set.iterator(); while(i.hasnext()) System.out.println(i.next()); Elementi non ordinati Elementi duplicati non presenti //Anche se fosse un omonimo, non lo farebbe inserire: è un Set set.add(new Persona("Sartori", "Fabio", "sartori1@disco.unimib.it")); //Lo inserisce set.add(new Persona("Fiamberti", "Francesco", "fiamberti@disco.unimib.it")); System.out.println("Set nuovo: "); Output: i = set.iterator(); Persona [cognome=tisato, nome=francesco] while(i.hasnext()) Persona [cognome=denaro, nome=giovanni] System.out.println(i.next()); Persona [cognome=micucci, nome=daniela] Set nuovo: Persona [cognome=tisato, nome=francesco] Persona [cognome=fiamberti, nome=francesco] Persona [cognome=denaro, nome=giovanni] Persona [cognome=micucci, nome=daniela] Programmazione con Java: Collection Framework 56 28

29 Interface Map: Esempio TreeMap import java.util.collection; import java.util.iterator; import java.util.map; import java.util.treemap; public class DemoPersonaTreeMap { public static void main(string a[]){ Map<Persona, String> map = new TreeMap<Persona, String>(); map.put(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it"), "Docente - Turno B"); map.put(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it"), "Esercitatore - Turno B"); map.put(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it"), "Docente - Turno A"); map.put(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it"), "Esercitatore - Turno B"); Collection<String> values = map.values(); Iterator<String> i = values.iterator(); System.out.println("Valori:"); while(i.hasnext()) System.out.println(i.next()); Chiavi ordinate Chiavi duplicate non presenti Collection<Persona> keys = map.keyset(); Iterator<Persona> ii = keys.iterator(); Output: System.out.println("Chiavi:"); Valori: while(ii.hasnext()) Esercitatore Turno B System.out.println(ii.next()); Docente Turno B Esercitatore Turno B //Chiave già presente! Da specifica del metodo put, Docente Turno A //sostituisce il vecchio valore con il nuovo Chiavi: map.put(new Persona("Sartori", "Fabio", Persona [cognome=denaro, nome=giovanni] "sartori1@disco.unimib.it"), "Esercitatore - Turno B"); Persona [cognome=micucci, nome=daniela] map.put(new Persona("Fiamberti", "Francesco", "fiamberti@disco.unimib.it"), "Tutor - Turno B"); Persona [cognome=tisato, nome=francesco] ii = keys.iterator(); Chiavi: System.out.println("Chiavi:"); Persona [cognome=denaro, nome=giovanni] while(ii.hasnext()) System.out.println(ii.next()); Persona [cognome=fiamberti, nome=francesco] Persona [cognome=micucci, nome=daniela] Programmazione con Java: Collection Framework Persona [cognome=tisato, nome=francesco] 57 Interface Map: Esempio HashMap import java.util.collection; import java.util.iterator; import java.util.map; import java.util.hashmap; public class DemoPersonaHashMap { public static void main(string a[]){ Map<Persona, String> map = new HashMap<Persona, String>(); map.put(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it"), "Docente - Turno B"); map.put(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it"), "Esercitatore - Turno B"); map.put(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it"), "Docente - Turno A"); map.put(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it"), "Esercitatore - Turno B"); Collection<String> values = map.values(); Iterator<String> i = values.iterator(); System.out.println("Valori:"); while(i.hasnext()) System.out.println(i.next()); Chiavi non ordinati Chiavi duplicate non presenti Collection<Persona> keys = map.keyset(); Iterator<Persona> ii = keys.iterator(); Output: System.out.println("Chiavi:"); Valori: while(ii.hasnext()) Docente Turno A System.out.println(ii.next()); Esercitatore Turno B Esercitatore Turno B //Chiave già presente! Da specifica del metodo put, Docente Turno B //sostituisce il vecchio valore con il nuovo Chiavi: map.put(new Persona("Sartori", "Fabio", Persona [cognome=tisato, nome=francesco] "sartori1@disco.unimib.it"), "Esercitatore - Turno C"); Persona [cognome=denaro, nome=giovanni] map.put(new Persona("Fiamberti", "Francesco", "fiamberti@disco.unimib.it"), "Tutor - Turno B"); Persona [cognome=micucci, nome=daniela] i = values.iterator(); Valori: System.out.println( Valori:"); Docente Turno A while(i.hasnext()) System.out.println(i.next()); Tutor Turno B Esercitatore Turno B Esercitatore Turno C Programmazione con Java: Collection Framework Docente Turno B 58 29

30 CLASSE COLLECTIONS Programmazione con Java: Collection Framework 59 Classe Collections Collections è una classe che contiene metodi di utilità Esempi: sort(list) Ordina una lista con un algoritmo veloce, che evita di riordinare elementi uguali shuffle(list) Scambia gli elementi di una lista in ordine casuale reverse(list) Inverte l ordine degli elementi di una lista fill(list, Object) Sovrascrive ogni elemento della lista con l oggetto specificato copy(list dest, List src) Copia la lista sorgente in quella di destinazione binarysearch(list, Object) Cerca un elemento in una lista ordinata usando un algoritmo di ricerca binaria Nota: è possibile usare i metodi della classe Collections con qualsiasi classi di oggetti per cui sia stata definita una relazione d ordine naturale tramite l implementazione dell interfaccia Comparable Programmazione con Java: Collection Framework 60 30

31 Esempio di utilizzo: sort import java.util.arraylist; import java.util.collections; import java.util.iterator; import java.util.list; public class DemoPersonaArrayList { public static void main(string a[]){ List<Persona> lista = new ArrayList<Persona>(); lista.add(new Persona("Micucci", "Daniela", "micucci@disco.unimib.it")); lista.add(new Persona("Denaro", "Giovanni", "denaro@disco.unimib.it")); lista.add(new Persona("Tisato", "Francesco", "tisato@disco.unimib.it")); lista.add(new Persona("Sartori", "Fabio", "sartori@disco.unimib.it")); Iterator<Persona> i = lista.iterator(); while(i.hasnext()) System.out.println(i.next()); Collections.sort(lista); System.out.println("Set ordinato: "); i = lista.iterator(); while(i.hasnext()) System.out.println(i.next()); Output: Persona [cognome=micucci, nome=daniela] Persona [cognome=denaro, nome=giovanni] Persona [cognome=tisato, nome=francesco] Set ordinato: Persona [cognome=denaro, nome=giovanni] Persona [cognome=micucci, nome=daniela] Persona [cognome=tisato, nome=francesco] Programmazione con Java: Collection Framework 61 31

STRUTTURE DATI IN JAVA

STRUTTURE DATI IN JAVA Package java.util STRUTTURE DATI IN JAVA Molto spesso, una computazione si basa su una o più strutture dati, di vario tipo: insiemi, code, stack, tabelle, liste, alberi Data la loro importanza, Java ne

Dettagli

Il Java Collections Framework

Il Java Collections Framework Il Java Collections Framework Il Java Collections Framework è una libreria formata da un insieme di interfacce e di classi che le implementano per lavorare con gruppi di oggetti (collezioni). Le interfacce

Dettagli

Bank. Bank. BankAccount. Bank. Bank. private BankAccount[] conti; // Posizione attuale private int posizioneattuale;...

Bank. Bank. BankAccount. Bank. Bank. private BankAccount[] conti; // Posizione attuale private int posizioneattuale;... Bank BankAccount Bank Bank Bank BankAccount private BankAccount[] conti; // Posizione attuale private int posizioneattuale;... Bank Bank public Bank(String nome, String internationalcode, int dimensione)

Dettagli

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

STRUTTURE DATI: OLTRE GLI ARRAY LISTE STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi

Dettagli

22 - Strutture Dati (Java Collections Framework)

22 - Strutture Dati (Java Collections Framework) 22 - Strutture Dati (Java Collections Framework) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3 Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Collezioni. (a cura del Prof. Marco Patella)

Collezioni. (a cura del Prof. Marco Patella) (a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere e proprie) mappe implementate

Dettagli

Metodi di una Collection

Metodi di una Collection Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare

Dettagli

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classe Wrapper & Generics

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classe Wrapper & Generics Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classe Wrapper & Generics A.A. 2005/06 Tutor: Loris Cancellieri loris.cancellieri@studio.unibo.it Strutture Dati in Java Molto spesso,

Dettagli

Mapping delle collections. Dott. Doria Mauro

Mapping delle collections. Dott. Doria Mauro Hibernate Mapping delle collections Dott. Doria Mauro doriamauro@gmail.com Mapping delle collections di elementi di tipo value primitivi o Stringhe Una classe di tipo value: Non ha una propria identità

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

Dettagli

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1 Fondamenti di Informatica T-1 Mappe Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 1 Mappe: definizione Tabelle a due colonne:

Dettagli

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point Gli HashSet Tipo predefinito che rappresenta insiemi di Object Cosa succede se... Posso mettere un riferimento a un Point in una variabile Object Object o=new Point(12,3); è quasi tutto come se l oggetto

Dettagli

Java Collection Framework

Java Collection Framework STRUTTURE DATI IN JAVA Strutture Dati nella piattaforma Java: Java Collection Framework Java Collection Framework (JCF) fornisce il supporto a qualunque tipo di struttura dati interfacce una classe Collections

Dettagli

Fondamenti di Informatica T1 Mappe

Fondamenti di Informatica T1 Mappe Fondamenti di Informatica T1 Mappe Tutor Melissa Licciardello melissa.licciardell2@unibo.it Melissa Licciardello Fondamenti di Informatica T1 1 / 16 Mappe Matrice N x 2 : Gli elementi della prima colonna,

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classi Wrapper, & Generics. Il package java.util. Strutture dati avanzate in Java

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classi Wrapper, & Generics. Il package java.util. Strutture dati avanzate in Java Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classi Wrapper, & Generics A.A. 2007/08 Tutor: Barbara Pettazzoni barbara.pettazzoni@studio.unibo.it Il package java.util Avete giá avuto

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Alberi binari di ricerca (BST) Implementazione BST d in Java Concetti di

Dettagli

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa: Come nella Mappa: un Dizionario è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore. ogni elemento (k,v) viene detto entrata (entry) del Dizionario. chiavi

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Dettagli

Java Collection Framework. L14 JCF unina 1

Java Collection Framework. L14 JCF unina 1 Java Collection Framework L14 JCF unina 1 Java Collection Framework Prima di Java 2 erano disponibili poche classi container, soprattutto se riferite alla libreria STL del C++ Vector, Stack, Hashtable,

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public

Dettagli

Telematica II 15. Esercitazione/Laboratorio 5

Telematica II 15. Esercitazione/Laboratorio 5 Protocollo FTP FTP Client TCP control connection (port 21) FTP Server Telematica II 15. Esercitazione/Laboratorio 5 File System locale TCP data connection (port( 20) File System remoto La connessione di

Dettagli

Il linguaggio Java: aggiunte in Java 1.5

Il linguaggio Java: aggiunte in Java 1.5 .. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli

Dettagli

Fondamenti di Informatica I

Fondamenti di Informatica I Sapienza Università di Roma, Facoltà di Ingegneria Corso di Fondamenti di Informatica I Canale 1 (A-K) Anno Accademico 2009-2010 Corso di Laurea in Ingegneria Informatica Docente: Camil Demetrescu Esercitatore:

Dettagli

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; } Il Linguaggio Java Le interfacce La classe BankAccount public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; public void deposit(double

Dettagli

Interfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato

Interfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato Interfacce 1 Interfacce Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato costituito dall intestazione senza il corpo della definizione

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

Capitolo 16. Programmazione generica. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Capitolo 16. Programmazione generica. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione Capitolo 16 Programmazione generica Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione Obiettivi del capitolo Capire gli obiettivi della programmazione generica Essere in grado

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Corso di Progettazione del Software

Corso di Progettazione del Software T. Mancini & M. Scannapieco S.JOO.6 Java Collections Framework February 2, 2008 p. 1/28 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di

Dettagli

Errata Corrige di Manuale di Java 8

Errata Corrige di Manuale di Java 8 Errata Corrige di Manuale di Java 8 pag. 43 - par. 2.5.1 - primo riquadro che riporta linee di codice public class Punto { public Punto() //metodo costruttore { deve essere corretto come di seguito: public

Dettagli

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei Confronti, equals Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals 1 Operatori relazionali All interno delle parentesi tonde della condizione dell if è possibile, come abbiamo

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2011-12 17 settembre 2012 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari Algoritmi e Strutture Dati Tipo di dato astratto e Strutture dati elementari 1 Argomenti della lezione Tipi di dato astratto Strutture dati elementari Liste o Implementazione di liste in Java Stack Code

Dettagli

COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI

COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI SOMMARIO Collezioni: Array e liste. Iteratori. Classi interne. Nodi: dati e riferimenti. Liste: LinkedList: specifica e implementazione. Prestazioni. COLLEZIONI Una collezione (contenitore) è un oggetto

Dettagli

Ingegneria del Software 1: Generici e Collezioni

Ingegneria del Software 1: Generici e Collezioni Ingegneria del Software 1: Generici e Collezioni Due on Martedi, Marzo 31, 2015 Claudio Menghi, Alessandro Rizzi 1 Contents Ingegneria del Software 1 (Claudio Menghi, Alessandro Rizzi ): Generici e Collezioni

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Corso di Algoritmi e Strutture Dati con Laboratorio. Java Collections Framework (I parte)

Corso di Algoritmi e Strutture Dati con Laboratorio. Java Collections Framework (I parte) Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (I parte) L infrastruttura JCF è una raccolta di interfacce e classi, tra loro correlate, appartenenti al pacchetto java.util.

Dettagli

La classe Object. L2-Linguaggi di Programmazione II-unina 1

La classe Object. L2-Linguaggi di Programmazione II-unina 1 La classe Object L2-Linguaggi di Programmazione II-unina 1 JAVA è dotata di una classe speciale, una classe cosmica, denominata Object Qualsiasi altra classe deriva da Object Object Una variabile di tipo

Dettagli

Indice. Prefazione. 3 Oggetti e Java 53

Indice. Prefazione. 3 Oggetti e Java 53 Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware

Dettagli

Programmazione in Python per la bioinformatica

Programmazione in Python per la bioinformatica per la bioinformatica University of Verona Sommario La struttura dati Lista Lista Come si rappresenta una lista in python Reminder: Lista collezione ordinata di elementi L = a 0, a 1,, a n 1 La variabile

Dettagli

Programmazione Java: Come contenere oggetti

Programmazione Java: Come contenere oggetti Programmazione Java: Come contenere oggetti romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Introduzione ai contenitori Interfacce Implementazione Collection List Set Map Ordinamento»

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Tipi Tipo Astratto di Permette di specicare dati in modo astratto Astratto Indipendentemente

Dettagli

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 16 Tipi riferimento e stringhe. Carla Limongelli.

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 16 Tipi riferimento e stringhe. Carla Limongelli. Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 16 Tipi riferimento e stringhe Carla Limongelli Maggio 2010 Definizione di metodi 1 Contenuti Tipi riferimento Stringhe e oggetti String

Dettagli

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe

Dettagli

Astrazioni sul controllo. Iteratori

Astrazioni sul controllo. Iteratori Astrazioni sul controllo Iteratori Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di un operazione che consenta cicli (iterazioni) Es.: gli

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

Dettagli

Definizione di metodi in Java

Definizione di metodi in Java Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un

Dettagli

Programmazione 1 A.A. 2015/2016

Programmazione 1 A.A. 2015/2016 Cognome e Nome Matricola Programmazione 1 A.A. 2015/2016 Appello del 16 Dicembre 2015 Compito n 1 Prima parte Esercizio 1 (10 punti) Cosa stampa il seguente frammento di codice Java? int[] A = {3, 8, 91,

Dettagli

Lezione 6 Collezioni. Il concetto astratto di collezione. Servizio minimo: IContainer. Stack (pila)

Lezione 6 Collezioni. Il concetto astratto di collezione. Servizio minimo: IContainer. Stack (pila) Lezione 6 Collezioni Il problema delle collezioni è molto vasto, ed è stato oggetto di studio fin dai primordi dell'informatica. Per esplorarlo senza perdersi è bene proporsi un metodo. Seguiremo il seguente:

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 8 luglio 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo

Dettagli

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Informatica I. Ingegneria Medica. Prof. Diego Salamon Informatica I Ingegneria Medica Prof. Diego Salamon Gestione I/O Prof. Diego Salamon Introduzione Nella creazione e gestione del software è necessario interagire con entità esterne a quelle del programma

Dettagli

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo parametrico vs polimorfismo per inclusione Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico

Dettagli

IL CONCETTO DI CLASSE

IL CONCETTO DI CLASSE IL CONCETTO DI CLASSE Una CLASSE riunisce le proprietà di: componente software: può essere dotata di suoi propri dati / operazioni moduli: riunisce dati e relative operazioni, fornendo idonei meccanismi

Dettagli

Strutture dati "classiche"

Strutture dati classiche Modulo di Roadmap 0. Primi passi con Java 1. Buone abitudini 2. Tipi di dati primitivi 3. Uso di classi 4. Leggere e scrivere 5. Definire metodi 6. Strutture di controllo 7. Array e Collection 8. Progetto

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Design Pattern Dott. Alessandro Roncato 18/10/2011 Design Patters I Design Patters sono soluzioni di progettazione standard e ben collaudate che possono essere usate in

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 22 luglio 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Il linguaggio Java. La superclasse universale Object

Il linguaggio Java. La superclasse universale Object Il linguaggio Java La superclasse universale Object La classe Object La classe Object è la superclasse, diretta o indiretta, di ogni classe La classe Object definisce lo stato ed il comportamento base

Dettagli

FILE E INDICI Architettura DBMS

FILE E INDICI Architettura DBMS FILE E INDICI Architettura DBMS Giorgio Giacinto 2010 Database 2 Dati su dispositivi di memorizzazione esterni! Dischi! si può leggere qualunque pagina a costo medio fisso! Nastri! si possono leggere le

Dettagli

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010 Esercizio 1. Si deve modellare con una classe Java il contenuto di un portamonete, con delle opportune semplificazioni. Le monete da considerare sono di soli 4 tagli: 10, 20, 50 e 100 centesimi (cioè 1

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 5 Alberto Ceselli alberto.ceselli@unimi.it Università degli Studi di Milano 12 Marzo 2013 Le funzioni sono oggetti di prima classe in Scheme In Scheme le funzioni

Dettagli

LE TABELLE. Le liste permettono di avere una sequenza di righe In alcune applicazioni è però necessario visualizzare le informazioni anche in colonne

LE TABELLE. Le liste permettono di avere una sequenza di righe In alcune applicazioni è però necessario visualizzare le informazioni anche in colonne LE TABELLE Le liste permettono di avere una sequenza di righe In alcune applicazioni è però necessario visualizzare le informazioni anche in colonne Nome Cognome Indirizzo Telefono Mario Bianchi Via Roma,

Dettagli

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna: Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe String Una stringa Java rappresenta uno specifico valore e come

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo. Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 21 settembre 2015 TEMPO DISPONIBILE: 1 ora e 40

Dettagli

Esempio: Interfacce. Gioco Interfacce

Esempio: Interfacce. Gioco Interfacce Esempio: Interfacce 1 Descrizione Si supponga di avere delle carte da gioco. Ogni carta rappresenta un Personaggio che può essere di tipo o Umano o Mostro. Un Personaggio di tipo Umano ha una forza fisica

Dettagli

Programmazione ad oggetti Prova scritta 15 Gennaio 2013

Programmazione ad oggetti Prova scritta 15 Gennaio 2013 Programmazione ad oggetti Prova scritta 15 Gennaio 2013 Nome: Matricola: Istruzioni Scrivete il vostro nome sul primo foglio. Scrivete le soluzioni nello spazio riservato a ciascun esercizio. Studenti

Dettagli

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM ERRATA CORRIGE dei programmi della prima stampa (Aprile 2004) aggiornato al 20/05/2017 Nota: il codice corretto è ottenibile da quella errato

Dettagli

Marco Faella I pattern Template Method e Factory Method

Marco Faella I pattern Template Method e Factory Method Marco Faella I pattern Template Method e Factory Method 12 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com

Dettagli

Scope e visibilità per classi

Scope e visibilità per classi Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:

Dettagli

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: 1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente

Dettagli

Pag Politecnico di Torino 1

Pag Politecnico di Torino 1 Introduzione Strutture fisiche di accesso Definizione di indici in SQL Progettazione fisica Linguaggio SQL: costrutti avanzati D B M G D B M G2 Organizzazione fisica dei dati All interno di un DBMS relazionale,

Dettagli

18 - Classi parzialmente definite: Classi Astratte e Interfacce

18 - Classi parzialmente definite: Classi Astratte e Interfacce 18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

Lezione 13 Classi interne

Lezione 13 Classi interne Lezione 13 Classi interne Questa lezione chiude la parte del corso più squisitamente dedicata alla programmazione orientata agli oggetti con Java. Sarà esaminato un nuovo tipo di classi, finora taciuto,

Dettagli

Parcheggio.rtf 1/8 6 gennaio 2009. Prova di programmazione: parcheggio a pagamento

Parcheggio.rtf 1/8 6 gennaio 2009. Prova di programmazione: parcheggio a pagamento Parcheggio.rtf 1/8 6 gennaio 2009 Prova di programmazione: parcheggio a pagamento Si sviluppi il codice per la gestione di un parcheggio a pagamento mediante la classe Parcheggio, che ospita le auto rappresentate

Dettagli

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI SOMMARIO ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI Dimensione e Altezza ALBERI BINARI DI RICERCA (BST) Introduzione Ricerca, inserimento e cancellazione Implementazione

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 22 febbraio 2013 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

Politecnico di Milano

Politecnico di Milano Politecnico di Milano Anno accademico 2011-2012 Ingegneria del Software Appello del 29 giugno 2012 Cognome: Nome: Matricola: Sezione (segnarne una): Baresi Ghezzi San Pietro Istruzioni 1. La mancata indicazione

Dettagli

Uso di metodi statici. Walter Didimo

Uso di metodi statici. Walter Didimo Uso di metodi statici Walter Didimo Metodi di istanza Fino ad ora abbiamo imparato a creare oggetti e ad invocare metodi su tali oggetti i metodi venivano eseguiti dagli oggetti un metodo invocato su un

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI DI CALCOLATORI Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli