Esempio su strutture dati dinamiche: ArrayList

Documenti analoghi
Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList

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

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

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

TIPI PRIMITIVI E CLASSI WRAPPER

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esempio 2: Subtyping

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

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

Lezione 6 programmazione in Java

Collezione di oggetti: Array List

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

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

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Algoritmi di Ricerca. Esempi di programmi Java

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

Java Le stringhe. Stringhe

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

TIPI PRIMITIVI: LIMITI

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

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

Algoritmi di Ricerca. Esempi di programmi Java

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

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Collezioni. (a cura del Prof. Marco Patella)

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Uso di metodi statici. Walter Didimo

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

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

Esercitazione n 2. Obiettivi

Richiami di Fondamenti di Informatica - 1

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

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

Tipi di dato strutturati: Array

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

Introduzione Programmazione Java

Laboratorio di Sistemi Classi e relazioni Java

Array mono- e bi-dimensionali Cicli while e do-while

Programmazione 1 A.A. 2015/2016

Il linguaggio Java: aggiunte in Java 1.5

Stringhe e Array. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Programmazione orientata agli oggetti. Ivan Lanese

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione orientata agli oggetti Classi astratte e interfacce

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Testo di Riferimento (usato nei corsi precedenti)

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

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

Generics & Collections

Sul pattern Iterator

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

Introduzione. Java RTTI RTTI. Il run-time type identification è quella parte di Java che si occupa di controllare i tipi a runtime

Questi lucidi provengono dal capitolo 2 di:

Muoversi all interno di un Vector. Vector e Enumeration. Enumeration. Collezioni di oggetti: Vector. La classe Object. Aggiungere oggetti a un Vector

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

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

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

Creazione, eliminazione, lettura e scrittura di file di testo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

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

Introduzione a C# Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Laboratorio di Programmazione 1 [Java]

Polimorfismo parametrico vs polimorfismo per inclusione

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

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

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

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

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

CORSO DI PROGRAMMAZIONE

Nota: questo discorso vale solo per i metodi e le componenti che esistono in tutte e due le classi

Programmazione II Compitino (Vers. A)

Laboratorio di Programmazione 1 [Java]

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

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

Programmazione II Compitino (Vers. B)

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

Introduzione alla Programmazione in Java attraverso un esempio commentato

Introduzione al Java Collections Framework

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

RTTI Run-time type identification

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

14 - Metodi e Costruttori

Costanti e Variabili

Transcript:

Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 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). Fondamenti di Informatica L-B 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 Fondamenti di Informatica L-B 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 Fondamenti di Informatica L-B 4

Costruttori La classe ArrayList definisce due costruttori: ArrayList(): crea un vettore vuoto in cui la capacita' iniziale non è specificata (costruttore di ddefault) ArrayList(int initialcapacity): crea un vettore con la capacità iniziale indicata Fondamenti di Informatica L-B 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 Fondamenti di Informatica L-B 6

Elenco dei metodi - 1 Restituisce il numero di elementi contenuti: int size() Restituisce l'elemento di indice index: Object get(int index) Sostituisce obj all'oggetto di posizione index: Object set(int index, Object obj) Inserisce obj nella posizione index e sposta tutti gli elementi, da index in poi, di una posizione: void add (int index, Object obj) Aggiunge obj dopo l'ultimo elemento (restituisce true): boolean add (Object obj) Fondamenti di Informatica L-B 7 Elenco dei metodi - 2 Rimuove l'oggetto presente nella posizione index e sposta all'indietro di una posizione tutti gli elementi successivi a quello rimosso: void remove (int index) Rimuove l'oggetto obj se presente restituendo true, oppure restituisce false: boolean remove (Object obj) Restituisce la prima posizione dell'oggetto 'elem' nel vettore, -1 se non esiste: int indexof (Object elem) Restituisce una stringa "[el1, el2, eln] : String tostring () Fondamenti di Informatica L-B 8

Esempio import java.util.arraylist; public class EsempioArrayList { public static void main(string[] args) { ArrayList v = new ArrayList (3); 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"); 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); // Serve un downcast è } } Fondamenti di Informatica L-B 9 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(); Fondamenti di Informatica L-B 10

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; Fondamenti di Informatica L-B 11