Programmazione in Java Parte II

Documenti analoghi
14. Java Collection Framework Le collezioni: insiemi e liste

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione

Algoritmi e strutture dati

Collezioni, mappe e iteratori (a cura del Prof. Marco Patella)

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

Metodi di una Collection

Esempio su strutture dati dinamiche: ArrayList

Fondamenti di Informatica T-1. Collezioni

Fondamenti di Informatica T-1

Esempio su strutture dati dinamiche: ArrayList

Fondamenti di Informatica T-1. Collezioni

Introduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework

Introduzione al Java Collections Framework

Le collezioni di oggetti. Prof. Accarino IIS Altiero Spinelli via Leopardi 132 Sesto San Giovanni

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2013/2014

STRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè

Esempio su strutture dati dinamiche: ArrayList

Generics & Collections

Capitolo 14 Introduzione alle strutture di dati. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Progettazione del Software

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

Alberi Binari Alberi Binari

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni

tipi di dato astratti

22 - Strutture Dati (Java Collections Framework)

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme.

Classi collezione in Java e JSetL: confronti ed implementazioni

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda

Orario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Esempio su strutture dati dinamiche: ArrayList

Tipi mutabili e immutabili : richiamo. Algoritmi e Laboratorio a.a Lezioni. Collezioni di elementi

Corso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione

Testo di Riferimento (usato nei corsi precedenti)

Notazione grafica UML

La struttura dati CODA

Coda a doppio ingresso (Deque)

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR

Coda a doppio ingresso (Deque)

Programmazione Orientata agli Oggetti in Linguaggio Java

Il Java Collections Framework

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda

Collezioni. (a cura del Prof. Marco Patella)

lezione 9 min-heap binario Heap e Alberi posizionali generali

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Le Collezioni (Java Collections)

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Fondamenti di Informatica

Liste. Introduzione alle strutture dati. Capitolo 17 Introduzione alle strutture dati

lezione 5 Tipo di dato Lista Liste

SOMMARIO STACK. STACK: specifica STACK

Collezioni in Java. Emilio Di Giacomo e Walter Didimo

Altro di ADT. Dominio. Funzioni. Dominio. Funzioni. Costanti - Collezioni

Programmazione Orientata agli Oggetti in Linguaggio Java

Fondamenti di Informatica T-1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

A. Ferrari. collezioni. Java. Object Oriented Programming

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

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

Standard Template Library

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

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

TIPO DI DATO ASTRATTO

Liste. Costo operazioni Tutte le operazioni hanno costo O(1)

Collezioni ALBERTO FERRARI

Algoritmi e Strutture di Dati

Esercizio. Strutture Dati

COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI

Laboratorio di Programmazione

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

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

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

ArrayList. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

Pile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione.

Fondamenti di informatica Oggetti e Java. Luca Cabibbo. Collezioni++ (Aggiunte di Marco Patella) Capitolo 26.bis. aprile 2006.

Collections. ASD-L - Luca Tesei

Corso sul linguaggio Java

La struttura dati PILA

Corso sul linguaggio Java

algoritmi e strutture di dati

Algoritmi e Strutture di Dati

Fondamenti di Informatica T-1

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Il tipo astratto di dati Node List

Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista

1 Strutture di dati dinamiche. 2 Vector come esempio di array dinamico

Introduzione al Java Collections Framework. Laboratorio di Programmazione Anno Accademico Interfacce del Collections Framework

Collections. Laboratorio di Programmazione

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

OLTRE LE CLASSI OLTRE LE CLASSI

Capitolo 17. Introduzione alle strutture di dati. Capitolo 17 Introduzione alle strutture di dati

Programmazione Orientata agli Oggetti in Linguaggio Java

Strutture lineari in Java

Il TDA Map. Tabelle hash

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica

Transcript:

Programmazione in Java Parte II Lezione 7 Dott. Marco Faella

Il Java Collection Framework Java Collection Framework (JCF) è una parte della libreria standard dedicata alle collezioni, intese come classi deputate a contenere altri oggetti Questa libreria offre strutture dati di supporto, molto utili alla programmazione, come liste, array di dimensione dinamica, insiemi, mappe associative (anche chiamate dizionari) e code Le classi e interfacce del JCF si dividono in due gerarchie: quella che si diparte dall'interfaccia Collection e quella che si diparte da Map Inoltre, la classe Collections (si noti la s finale) contiene numerosi algoritmi di supporto ad esempio, metodi che effettuano l'ordinamento

Liste concatenate La classe java.util.linkedlist<e> rappresenta una lista doppiamente concatenata La classe ha un parametro di tipo che indica il tipo degli oggetti contenuti Essa appartiene alla Java Collection Framework Qui, presentiamo brevemente i suoi metodi principali public boolean add(e x) aggiunge x in coda alla lista e restituisce true public boolean contains(object x) restituisce true se la lista contiene l'oggetto x; ha complessità proporzionale alla lunghezza della lista public int size() restituisce la dimensione della lista public void addfirst(e x) aggiunge x in testa alla lista public void addlast(e x) equivalente ad add(x), ma senza valore restituito public E removefirst() rimuove e restituisce la testa della lista public E removelast() rimuove e restituisce la coda della lista

Memory layout di LinkedList Esempio: LinkedList<String> l = new LinkedList<String>(); l.add( uno ); l.add( due ); Memory layout: uno due l value: next: previous: null value: next: null previous:

Il ciclo for-each Java 1.5 ha introdotto un nuovo tipo di ciclo for, chiamato ciclo for each Ad esempio: String[] array = { uno, due, tre }; for (String s: array) System.out.println(s); Il ciclo di sopra stampa tutte le stringhe contenute nell'array, una per rigo Questa nuova forma di ciclo permette di iterare su un array senza dover esplicitamente utilizzare un indice quindi senza il rischio di sbagliare gli estremi dell'iterazione Oltre che per gli array, il ciclo for-each funziona anche sulle liste precisamente, il ciclo for-each funziona su tutti gli oggetti che implementano l'interfaccia Iterable<E> Esercizio: scorrere una lista

L'interfaccia List<E> LinkedList<E> implementa l'interfaccia List<E> Anche ArrayList<E> implementa List<E> I metodi principali dell'interfaccia sono i seguenti int size() già visto in LinkedList boolean isempty() restituisce vero se e solo se la lista è vuota boolean add(e x) già visto in LinkedList boolean contains(object x) già visto in LinkedList boolean remove(object x) rimuove l'oggetto x dalla lista; restituisce vero se e solo se un tale elemento era presente

Accesso posizionale Inoltre, sono presenti i due metodi responsabili per l'accesso posizionale get(int i) restituisce l'elemento al posto i-esimo della sequenza; solleva un'eccezione se l'indice è minore di zero o maggiore o uguale di size() set(int i, E elem) sostituisce l'elemento al posto i-esimo della sequenza con elem; restituisce l'elemento sostituito; come get, solleva un'eccezione se l'indice è scorretto

Utilizzare LinkedList come stack o come coda Questi metodi permettono di utilizzare una LinkedList sia come stack sia come coda Per ottenere il comportamento di uno stack (detto LIFO: last in first out), inseriremo ed estrarremo gli elementi dalla stessa estremità della lista ad esempio, inserendo con con addlast (o con add) ed estraendo con removelast Per ottenere, invece, il comportamento di una coda (FIFO: first in first out), inseriremo ed estrarremo gli elementi da due estremità opposte

La classe ArrayList ArrayList è un'implementazione di List, realizzata internamente con un array di dimensione dinamica Ovvero, quando l'array sottostante è pieno, esso viene riallocato con una dimensione maggiore, e i vecchi dati vengono copiati nel nuovo array questa operazione avviene in modo trasparente per l'utente il metodo size restituisce il numero di elementi effettivamente presenti nella lista, non la dimensione dell'array sottostante Il ridimensionamento avviene in modo che l'operazione di inserimento (add) abbia complessità ammortizzata costante per ulteriori informazioni sulla complessità ammortizzata, si consulti un testo di algoritmi e strutture dati

Le liste e l'accesso posizionale L'accesso posizionale (metodi get e set) si comporta in maniera molto diversa in LinkedList rispetto ad ArrayList In LinkedList, ciascuna operazione di accesso posizionale può richiedere un tempo proporzionale alla lunghezza della lista difatti, per accedere all'elemento di posto n è necessario scorrere la lista, a partire dalla testa, o dalla coda, fino a raggiungere la posizione desiderata In ArrayList, ogni operazione di accesso posizionale richiede tempo costante Pertanto, è fortemente sconsigliato utilizzare l'accesso posizionale su LinkedList Se l'applicazione richiede l'accesso posizionale, è opportuno utilizzare un semplice array, oppure la classe ArrayList

Esercizio (esame 19/2/2009) Si implementi la classe Container, che rappresenta un contenitore per liquidi di forma fissata. Ad un contenitore, inizialmente vuoto, si può aggiungere acqua con il metodo addwater, che prende come argomento il numero di litri. Il metodo getamount restituisce la quantità d'acqua presente nel contenitore. Il metodo connect prende come argomento un altro contenitore, e lo collega a questo con un tubo. Dopo il collegamento, la quantità d'acqua nei due contenitori (e in tutti quelli ad essi collegati) sarà la stessa. Esempio d'uso (l'output è sulla slide successiva): Container a=new Container(), b=new Container(), c=new Container(), d=new Container(); a.addwater(12); d.addwater(8); a.connect(b); System.out.println(a.getAmount()+" "+b.getamount()+" "+c.getamount()+" "+d.getamount()); b.connect(c); System.out.println(a.getAmount()+" "+b.getamount()+" "+c.getamount()+" "+d.getamount()); c.connect(d); System.out.println(a.getAmount()+" "+b.getamount()+" "+c.getamount()+" "+d.getamount());

Esercizio (esame 19/2/2009) Output dell'esempio d'uso: 6.0 6.0 0.0 8.0 4.0 4.0 4.0 8.0 5.0 5.0 5.0 5.0