Nota (rif. alla lezione precedente): Vector<E> vs ArrayList<E> Le classi generiche Vector<E> e ArrayList<E> sono sostanzialmente equivalenti, ma: I metodi.

Slides:



Advertisements
Presentazioni simili
Argomenti della lezione
Advertisements

Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
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.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Fondamenti di Informatica
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Strutture dati elementari
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
Overriding.
tipo astratto, implementazione, algoritmi
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
Sistemi Operativi GESTIONE DEI PROCESSI.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Algoritmi e strutture dati
Corso di informatica Athena – Periti Informatici
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Conversione da base 10 a base X (Utilizzo della pila)
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Esercizi.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezioni 1-2.
Università degli Studi dell’Aquila
Schiavone & Scalas 2 In informatica, il termine stack o pila viene usato in diversi contesti per riferirsi a strutture dati le cui modalità d'accesso.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Algoritmi e Strutture Dati Strutture Dati Elementari.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
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.
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Esercizio 3. Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare i commenti.
Lezione X Laboratorio di Programmazione. Struttura di un programma Definizione classe e specifica (parziale) classe.hclasse.cpp main.cpp Specifica metodi.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
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.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione.
Corso di Algoritmi e Strutture Dati con Laboratorio Tipi di dato pila e coda.
Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (II parte)
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

Nota (rif. alla lezione precedente): Vector<E> vs ArrayList<E> Le classi generiche Vector<E> e ArrayList<E> sono sostanzialmente equivalenti, ma: I metodi di Vector<E> sono sincronizzati, mentre quelli di ArrayList<E> non lo sono. Quindi se il programma è concorrente (cioè usa il multi- threading di Java) è opportuno usare Vector<E>, altrimenti converrebbe ArrayList<E> perché più efficiente. Vector<E> fornisce, con opportuni metodi e costruttori, un controllo maggiore sulla capacità, cioè la dimensione dell'array soggiacente. Per motivi storici, Vector<E> fornisce più metodi con nomi diversi per manipolare gli elementi di un vettore. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

I costruttori di Vector<E> permettono di specificare la capacità iniziale del vettore (initialCapacity) e il valore da usare per aumentare la  capacità (capacityIncrement) quando necessario. Se (capacityIncrement == 0), il nuovo array avrà capacità doppia rispetto all'attuale. I costruttori di ArrayList<E> permettono di specificare solo la capacità iniziale del vettore. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Vector<E> ArrayList<E> /* crea un vettore vuoto, con i parametri specificati */ Vector (int initialCapacity, int capacityIncrement) /* default: capacityIncrement==0 */ Vector (int initialCapacity) /* default: initialCapacity==10 e capacityIncrement==0 */ Vector () ArrayList<E> /* crea un vettore con la capacità iniziale indicata */ ArrayList (int initialCapacity) /* crea un vettore vuoto; */ ArrayList () Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Esempio: MaxGenerico NB: extends è usato in senso generale, ad indicare sia "extends" (come nelle classi) sia "implements" (as in interfaces). import java.util.Vector; public class MaxGenerico { public static <T extends Comparable<T>> T max ( Vector<T> elenco){ if (elenco == null) return null; T max = null; for (T e : elenco){ if (max == null || e.compareTo(max)>0) max = e; } return max; Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Università degli Studi dell’Aquila Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Tipi di dato pila e coda

Tipo di dato Pila Uno stack è una collezione di elementi ( tipo di dato astratto) che supporta le seguenti operazioni tipiche: push, pop, top, isEmpty (eventualmente isFull) Disciplina di accesso: l'accesso agli elementi avviene secondo l'ordine inverso di inserimento (politica LIFO - last in first out) Esempi pratici sono le pile di piatti o le pile di giornali, che sottendono l'idea che quando si pone un piatto/giornale nella pila lo si metta in cima, e che quando lo si preleva, si prelevi analogamente quello in cima Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Tipo di dato Pila tipo Pila: dati: una sequenza S di n elementi. operazioni: isEmpty() → result restituisce true se S è vuota, e false altrimenti push(elem e) aggiunge e come ultimo elemento di S peek() → elem // altrimenti riferita come top() restituisce l’ultimo elemento di S (senza eliminarlo da S) pop() → elem elimina da S l’ultimo elemento e lo restituisce Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Tipo di dato Pila Il termine stack viene usato in informatica in modo più specifico in diversi contesti: lo stack è un elemento dell'architettura dei moderni processori, e fornisce il supporto fondamentale per l'implementazione del concetto di subroutine (vedi call stack, ricorsione) le macchine virtuali di quasi tutti i linguaggi di programmazione ad alto livello usano uno stack dei record di attivazione per implementare il concetto di subroutine (generalmente, ma non necessariamente, basandosi sullo stack del processore) la memoria degli automi a pila dell’informatica teorica è uno stack Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Verificare il bilanciamento delle parentesi in espressioni e programmi Tipo di dato Pila Esempi Verificare il bilanciamento delle parentesi in espressioni e programmi abc{defg{ijk}{l{mn}}op}qr (true) abc{def}}{ghij{kl}m (false) abc{def}{ghij{kl}m (false) Riconoscere stringhe palindrome abcdcba Valutare espressioni postfisse 2 3 4 + * Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Stacks in Java La classe stack nel package java.util dovrebbe essere evitata poiché è una sottoclasse di Vector e perciò consente l’esecuzione di operazioni non-stack. Nota per lo studente: è importante apprendere da zero come costruire un tipo di dato astratto Stack perchè: è il solo modo per capire come effettivamente lavora uno stack è fondamentale la pratica nella codifica, specialmente con strutture dati collegate Più in generale, è importante capire come programmare quando si lavora in un ambiente molto restrittivo che non fornisce librerie per la gestione di collezioni. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

L’interfaccia Stack La seguente interfaccia definisce le operazioni di interesse di una pila Rif. Stack.java public interface Stack { void push(Object item); Object pop(); Object peek(); // top() int size(); boolean isEmpty(); } Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Implementazioni Implementazione semplice basata su LinkedList: lo stack “delega” banalmente alla lista! Rif. SimpleStack.java Implementazione basata su array (tecnica del raddoppiamento-dimezzamento) Rif. ArrayStack.java Implementazione basata su liste collegate semplici Rif. LinkedStack.java Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Tipo di dato Coda Una coda è una collezione di elementi ( tipo di dato astratto) che supporta le seguenti operazioni tipiche: enqueue, dequeue, peek, isEmpty (eventualmente isFull) Disciplina di accesso: l'accesso agli elementi avviene secondo l'ordine di inserimento (politica FIFO - first in first out) Un esempio pratico sono le code che in un paese civile si fanno per ottenere un servizio, come pagare al supermercato o farsi tagliare i capelli dal parrucchiere: idealmente si viene serviti nello stesso ordine con cui ci si è presentati. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Tipo di dato Coda Questo tipo di struttura dati: è molto utilizzata in Informatica, ad esempio nella gestione delle operazioni da eseguire da parte di un sistema operativo è fondamentale nelle telecomunicazioni, in particolare nelle reti a commutazione di pacchetto, dove descrive la gestione dei pacchetti in attesa di essere trasmessi su un collegamento. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Tipo di dato Coda tipo Coda: dati: una sequenza S di n elementi. operazioni: isEmpty() → result restituisce true se S è vuota, e false altrimenti enqueue(elem e) aggiunge e come ultimo elemento di S peek() → elem // altrimenti riferita come first() restituisce il primo elemento di S (senza eliminarlo da S) dequeue() → elem elimina da S il primo elemento e lo restituisce Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

L’interfaccia Coda La seguente interfaccia definisce le operazioni di interesse di una coda Rif. Queue.java public interface Queue { public boolean isEmpty(); public void enqueue (Object e); public Object peek(); public Object dequeue(); public int size(); } Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

Implementazioni Implementazione semplice basata su LinkedList: la coda “delega” banalmente alla lista! Rif. SimpleQueue.java Implementazione basata su array a dimensione fissa (buffer circolare) Rif. BoundedQueue.java Implementazione basata su liste collegate semplici Rif. LinkedQueue.java Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015