Fondamenti di informatica T-A Esercitazione 7 : Collezioni AA 2012/2013 Tutor : Domenico Di Carlo
Collection java.util.Collection è un'interfaccia, più nello specifico è l'interfaccia radice in una tassonomia di interfacce e di classi concrete Una collection rappresenta un qualunque gruppo di oggetti ▫ Alcune collezioni permettono l'esistenza di duplicati, altre no. ▫ Alcune sono collezioni ordinate, altre no. L'ordinamento viene effettuato secondo il criterio definito nella compareTo(Object) La JDK non prevede implementazione alcuna per questa interfaccia : prevede invece classi (come TreeSet ed ArrayList) che implementaano interefacce più specifiche da essa derivate (come Set e List). Fondamenti di informatica A-K - Domenico Di Carlo
Collection L'interfaccia Collection definisce (ma non implementa) alcuni metodi base, quali : ▫ boolean add (Element e) <- per inserire un elemento ▫ boolean remove (Element e) <- per eliminare un elemento ▫ int size() <- restituisce il numero di elementi nella collezione ▫ Bollean isEmpty() <- restituisce true se è vuota List, Queue, Set etc sono interfacce loro stesse ! Fondamenti di informatica A-K - Domenico Di Carlo
Esempio pratico : ArrayList ArrayList ▫ Una collezione in cui : posso inserire l'emento i-esimo ad un indice specifico add(int index, E element) Inserts the specified element at the specified position in this list. addE add(E e) Appends the specified element to the end of this list. addE in cui possono apparire duplicati. La classe ArrayList implementa l'interfaccia List Esempio: List strings = new ArrayList (); strings.add("Two"); strings.add("Three"); strings.add(0, "One"); strings.add(3, "One"); strings.add("Three"); strings.add(strings.size() - 1, "Two"); System.out.println(strings); // Output: [One, Two, Three, One, Two, Three] Fondamenti di informatica A-K - Domenico Di Carlo
Esempio pratico : TreeSet TreeSet ▫ Una collezione che impone ordinamento naturale (interfaccia Comparable) add(E e) Adds the specified element to this set if it is not already present. addE senza duplicati, cioè in cui non può esistere una coppia di elementi e1 ed e2 tali per cui e1.equals(e2). La classe Treeset implementa l'interfaccia SortedSet che a sua volta implementa l'interfaccia Set Esempio: SortedSet sortedSet = new TreeSet (); sortedSet.add("One"); sortedSet.add("Two"); sortedSet.add("One"); sortedSet.add("Three"); System.out.println(sortedSet.toString()); // Output: [One, Three, Two] // (natural order : o<th<tw, no duplicates) Fondamenti di informatica A-K - Domenico Di Carlo
Array VS Arraylist Array : ▫ Contengono solo oggetti dello stesso tipo, non possiamo avere in uno stesso Array una Stringa ed un intero ▫ Sono di dimensione prefissata e non estendibile Fondamenti di informatica A-K - Domenico Di Carlo ArrayList : ▫ Possono contenere oggetti qualsiasi. All'interno della medesima istanza di ArrayList possiamo trovare un float ed una Stringa ▫ La dimensione iniziale non è predeterminata, andando ad aggiungere o rimuovere elementi c'è un resize automatico
Treeset, Esercitazione 7.1 Fondamenti di informatica A-K - Domenico Di Carlo
Esercitazione 7.2 Si vogliono gestire gli autoveicoli registrati presso un ufficio di motorizzazione Civile. L’ufficio memorizza modello, targa ed anno di immatricolazione di ogni automobile registrata. Si definisca la classe “Automobile”, che: ▫ presenti dei campi interni per memorizzare i dati necessari ▫ definisca un costruttore opportuno ▫ definisca i metodi per accedere ai campi interni ▫ definisca il metodo “equals” per stabilire l’uguaglianza con un’altra automobile (l’uguaglianza va verificata solo sulla targa) ▫ implementi l’interfaccia “Comparable”, per stabilire la precedenza con un’altra automobile (si utilizzi l’ordine alfabetico sulle targhe) Una applicazione di test (Esercitazione 72) che crei un insieme di auto che non ammetta elementi ripetuti. Lo popoli inventando qualche auto del tipo : ▫ mezzi.add(new Automobile("Seat Ibiza", "DS244TC", 2009)); stampi a video l'insieme creato e valuti la soluzione ottenuta provando ad inserire più volte un'auto già presente Fondamenti di informatica A-K - Domenico Di Carlo
Esercitazione 7.3 Per gestire l’ufficio di motorizzazione di una specifica città, si definisca la classe Motorizzazione che : ▫ presenti dei campi interni per memorizzare la città cui quella motorizzazione appartiene ed un insieme ordinato di automobili (utilizzare la classe Automobile creata nell'esercitazione precedente) ▫ definisca un costruttore che prenda in ingresso una Stringa rappresentante la città e che azzeri la lista delle automobili di quella motorizzazione ▫ definisca i metodi per accedere ai campi interni ▫ definisca il metodo “aggiungi” che permette di registrare una nuova automobile (nel caso la targa sia già presente in registro, il metodo restituisce “false”). ▫ definisca il metodo “equals” per stabilire l’uguaglianza con un’altra “Motorizzazione” (l’uguaglianza va verificata solo sulla citta di ubicazione) ▫ definisca il metodo “toString” ▫ definisca il metodo “quante”, che restituisce il numero di auto registrate Una applicazione di test (Esercitazione73.java) che : ▫ crei una motorizzazione, aggiunga automobili (utilizzare quelle dell'esercizio precedente). ▫ Provi ad aggiungere un'automobile con la stessa targa di un'altra già presente (insieme di elementi distinti!) in quella motorizzazione e stampi a video un messaggio di errore. ▫ Stampi tutte le automobili presenti in quella motorizzazione Fondamenti di informatica A-K - Domenico Di Carlo