Esempio su strutture dati dinamiche: ArrayList

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

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

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

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

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

ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci daniela.micucci@unimib.it

Programmazione Orientata agli Oggetti in Linguaggio Java

Esonero del corso di Programmazione a Oggetti

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

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

Gestione delle eccezioni in Java

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Gestione di files Motivazioni

Algoritmi di Ricerca. Esempi di programmi Java

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

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

Ingegneria del Software

Telematica II 15. Esercitazione/Laboratorio 5

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

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

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

ARRAY E STRINGHE. G. Frosini Slide 1

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

3. Terza esercitazione autoguidata: progetto gestione voli

Refactoring 5 Sposta Metodo. 5 Sposta Metodo. 5 Sposta Metodo - Codice iniziale

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

4 GLI ARRAY E LE STRINGHE

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

Lezione 6 Le pile. Informatica. 28 Aprile 2016

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

esercizi Esercizi / problemi

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Java Native Interface Appunti

INTRODUZIONE INTRODUZIONE JAVA JAVA

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Esercizi della lezione 5 di Java

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Java Collection Framework

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a I scritto Febbraio 11 Febbraio 2011

Programmazione Orientata agli Oggetti in Linguaggio Java

Le variabili. Olga Scotti

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone.

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Compute engine generici in RMI

Definizione di classi con array di oggetti

Lettura e scrittura di file di dati input/output

Dalle Classi Alle Interfacce

Visualizzare o modificare il codice sorgente del documento (per utenti avanzati,linguaggio HTML).

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Introduciamo l'uso della programmazione ad oggetti in PHP...perchè si può fare!

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Esempi di esercizi d esame

Come creare un modulo con Google Drive

Esercizi classi e array

DATI IDENTIFICATIVI DEL PROGETTO

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Realizzazione di una classe con un associazione

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist

L INTERFACCIA GRAFICA DI EXCEL

Procedura operativa per la gestione della funzione di formazione classi prime

Tipi di dati astratti e strutture dati (capitolo 14, e ancora capitolo 9)

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Concetto di Funzione e Procedura METODI in Java

La codifica. dell informazione

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Introduzione a Classi e Oggetti

Carte Laurea triennale in Comunicazione Digitale Laboratorio di Informatica Generale

Programmazione generica

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

5 - I package di base in Java

Programmazione ad oggetti

Synchronized (ancora)

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Programmazione su Reti

3. La sintassi di Java

Come usare la piattaforma StartUp

Programmazione ad oggetti

Astrazioni sul controllo. Iteratori

Symantec IT Management Suite 8.0 powered by Altiris technology

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Grafici e Pagina web

Strutture dati "classiche"

Transcript:

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 e rimane immutato Per superare questa limitazione Java mette a disposizione la classe ArrayList, contenuta nel package java.util che permette di rappresentare sequenze di oggetti di lunghezza variabile. Ciascun oggetto in un istanza di ArrayList viene identificato da un numero intero, detto indice, che ne indica la posizione. L'accesso ad una posizione inesistente provoca un errore (viene lanciata un'eccezione). 2

ArrayList e array L ArrayList è quindi simile ad un array. Le differenze principali sono due: La dimensione può variare durante l'esecuzione di un programma Gli elementi contenuti sono di un solo tipo: Object. ArrayList è una classe come tutte le altre, non ha alcuna sintassi particolare 3

Il contenuto Come abbiamo detto le istanze di ArrayList possono contenere solo istanze della classe Object. Questo vincolo è meno restrittiva di quanto sembrerebbe: in virtù del subtyping possiamo infatti mettere in un ArrayList istanze qualunque discendente di Object, ovvero qualunque oggetto Java Possiamo memorizzare oggetti di classi completamente scorrelate (come String, Rectangle, Persona) nella stessa istanza di ArrayLIst Quando li estraiamo dobbiamo però usare un downcast per passare dal tipo Object al tipo voluto 4

Costruttori La classe ArrayList definisce due costruttori: ArrayList(): crea un vettore vuoto in cui la capacita' iniziale non è specificata (costruttore di default) ArrayList(int initialcapacity): crea un vettore con la capacità iniziale indicata. Si utilizza quando si ha un idea, anche approssimata della dimensione massima che la lista raggiungerà. 5

Metodi I metodi definiti dalla classe consentono tra l'altro di: Leggere o scrivere un elemento in una certa posizione (operazioni analoghe a quelle sugli array) Aggiungere uno o più elementi, in varie posizioni Eliminare uno o più elementi, in varie posizioni Cercare un oggetto contenuto Trasformare l ArrayList in un array 6

Elenco dei metodi - 1 Object get(int index) Restituisce l'elemento di indice index. Object set(int index, Object obj) Sostituisce obj all'oggetto di posizione index. boolean add (Object obj) Aggiunge obj dopo l'ultimo elemento (restituisce sempre true). void add (int index, Object obj) Inserisce obj nella posizione index e sposta tutti gli elementi, da index in poi, di una posizione. int size() Restituisce il numero di elementi contenuti. boolean isempty() Dice se la lista è vuota. 7

Elenco dei metodi - 2 Object remove(int index) Rimuove l'oggetto presente nella posizione index e sposta all'indietro di una posizione tutti gli elementi successivi a quello rimosso. int indexof(object elem) Restituisce la prima posizione dell'oggetto 'elem' nel vettore, -1 se non esiste. String tostring() Restituisce una stringa con l elenco degli elementi contenuti: "[el1, el2, eln]. void clear() Svuota completamente la lista eliminando tutti gli elementi contenuti. public Object[] toarray() Restituisce un array con l intero contenuto. 8

Esempio 1 import java.util.arraylist; public class EsempioArrayList { public static void main(string[] args) { ArrayList v = new ArrayList(); System.out.println("n.elementi di v: "+v.size()); v.add("aaa"); v.add("bbb"); v.add("ddd"); v.add("eee"); v.add(2,"ccc"); // inserisce ccc prima di ddd System.out.println("n. elementi di v: "+v.size()); for (int i=0; i<v.size(); i++) System.out.println("elemento "+ i+": "+v.get(i)); System.out.println("primo: "+v.get(0)); System.out.println("ultimo: "+v.get(v.size()-1)); String s = (String)v.get(0); // downcast obbligatorio } } 9

Esempio 2: uno stack senza limiti import java.util.*; public class Stack { private ArrayList st; public Stack() { st = new ArrayList(); } } public void push(object item) { st.add(item); } public Object pop() { if (!st.isempty()) return st.remove(st.size()-1); else return null; } public int getcount() { return st.size(); } 10

Esempio 2: uso dello stack public class EsempioStack { public static void main(string[] args) { Stack s = new Stack(); s.push("ciao"); s.push("arrivederci!"); String x; x = (String)s.pop(); System.out.println(x); x = (String)s.pop(); System.out.println(x); } } 11

Memorizzare dati di tipi primitivi in ArrayList I tipi primitivi in Java non sono oggetti, quindi non è possibile inserirli direttamente in un vettore. Per memorizzare sequenze di numeri interi, numeri in virgola mobile, o valori di tipo boolean in un vettore, si devono usare le classi wrapper. ArrayList dati = new ArrayList(); int n = 30; Integer numero = new Integer(n); dati.add(numero); Integer numero = (Integer)dati.get(0); int n = numero.intvalue(); 12

Implementazione L'implementazione è basata sugli array. Al momento della creazione di un vettore, viene utilizzato un array di dimensioni predefinite. private Object[] v;... v = new Object[x]; Il valore di x viene stabilito dal sistema Java Successivamente, se la capacità dell'array non è più sufficiente, viene creato un nuovo array più grande nel quale vengono copiati tutti gli elementi del vecchio. Object[] v2 = new Object[2*v.length]; System.arraycopy(v,0,v2,0,v.length); v = v2; 13