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

TIPI PRIMITIVI E CLASSI WRAPPER

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

TIPI PRIMITIVI: LIMITI

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

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

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

Il linguaggio Java: aggiunte in Java 1.5

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

Polimorfismo parametrico vs polimorfismo per inclusione

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

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

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

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

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

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

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

Esempio 2: Subtyping

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

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

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

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

Introduzione Programmazione Java

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei

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

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

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

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

Programmazione 1 A.A. 2015/2016

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

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

GESTIONE DEGLI ERRORI

Classi Wrapper. int Integer float Float char Char byte Byte double Double. classe "wrapper"

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

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

Eccezioni Precisazioni e approfondimenti

ESERCIZIO 1 (FILE DI TESTO)

Uso di metodi statici. Walter Didimo

Corso sul linguaggio Java

Collezioni. (a cura del Prof. Marco Patella)

Algoritmi di Ricerca. Esempi di programmi Java

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

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

Introduzione a Java. Riferimenti

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

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

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

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Programmazione Orientata agli Oggetti in Linguaggio Java

Metodi statici. Dichiarazione e chiamata di metodi statici

Creazione, eliminazione, lettura e scrittura di file di testo

Generics & Collections

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

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

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

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Le basi del linguaggio Java

Collezione di oggetti: Array List

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

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

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

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

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

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

Sul pattern Iterator

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

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

Java Le stringhe. Stringhe

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

Algoritmi di Ricerca. Esempi di programmi Java

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Corso sul linguaggio Java

Esercitazione n 2. Obiettivi

Programmazione orientata agli oggetti. Ivan Lanese

RTTI Run-time type identification

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esempi in Java di program.ne O-O

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

Unità 2 I file binari

Richiami di Fondamenti di Informatica - 1

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classe Wrapper & Generics

Testo di Riferimento (usato nei corsi precedenti)

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Lezione 6 programmazione in Java

Java Native Interface Appunti

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

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

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

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

Laboratorio di Sistemi Classi e relazioni Java

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

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Alberi Binario in Java

Metodi di una Collection

Pile: implementazione. Pile: implementazione. Pile: implementazione con array. Pile: implementazione con array. Pile: implementazione con array

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 restrittivo 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 capacità 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: uso di ArrayList! Si realizzi un programma JAVA che faccia uso di un istanza della classe ArrayList per memorizzare una lista di parole di un abecedario: albero, banana, cuscino, denti, elevatore.! Si usino le diverse versioni del metodo add.! Si stampi poi a video la lista di parole e il primo e l ultimo elemento. 9 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("albero"); v.add("banana"); v.add("denti"); v.add("elevatore"); v.add(2,"cuscino"); // 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 10

Esempio 2: uno stack senza limiti! Si realizzi una classe Stack che, facendo uso di un istanza della classe ArrayList, implementi il comportamento di uno stack senza nessuna limitazione in memoria.! La classe deve implementare, oltre ai metodi push e pop, anche un costruttore (senza parametri) e un metodo getcount che restituisce il numero di elementi contenuti nello stack.! Si implementi un metodo main che inserisca nello stack due stringhe e poi le estragga dallo stack per stamparle a video. 11 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(); 12

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); 13 Esempio 3: uso dello stack con input! Si implementi un metodo main che inserisca in uno stack le parole inserite dall utente tramite tastiera, fino a quando non viene inserita una linea vuota.! Successivamente si stampino a video e su file di testo le parole estratte dallo stack usando l opportuno metodo. 14

Esempio 3: uso dello stack con input public static void main(string[] args) { Stack s = new Stack(); try { BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); PrintWriter output = new PrintWriter( new FileWriter("test.txt")); String word = input.readline(); while(!word.equals("")) { s.push(word); word = input.readline(); input.close(); word = (String)s.pop(); while(word!=null) { System.out.println("> "+word); output.println(word); word = (String)s.pop(); output.close(); catch (Exception e) { e.printstacktrace(); 15 Trattamento dei tipi primitivi! PROBLEMA: i tipi primitivi sono i "mattoni elementari" del linguaggio, ma non sono classi! non derivano da Object! non usabili nella JCF classica! i valori primitivi non sono uniformi agli oggetti!! SOLUZIONE: incapsularli in opportuni oggetti! l'incapsulamento di un primitivo in un opportuno oggetto si chiama BOXING! l'operazione duale si chiama UNBOXING Il linguaggio offre già le necessarie classi wrapper boolean Boolean char Character byte Byte short Short int Integer long Long double Double float Float int Integer 16

Java 1.5: boxing automatico! Da Java 1.5, come già in C#, boxing e unboxing sono diventati automatici.! È quindi possibile inserire direttamente valori primitivi in strutture dati, come pure effettuare operazioni aritmetiche su oggetti incapsulati.!"#$%&'#($')*+,,-%.'-/'01%$'23'#($'415,-6$*7-"'318'8/$'+',*-5-#-9$')($*$'+%'12:$4#'-/'$;,$4#$0&'#($' 415,-6$*'21;$/'#($',*-5-#-9$'-%'-#/')*+,,$*'46+//'"1*'318<'=-5-6+*63&'-"'318'8/$'+'%852$*'12:$4#')($%'+',*-5-#-9$'-/'$;,$4#$0&'#($'415,-6$*'8%21;$/'#($'12:$4#'"1*'318<' (##,>??:+9+</8%<415?014/?211@/?#8#1*-+6?:+9+?0+#+?%852$*46+//$/<(#56' List list = new ArrayList(); // OK da Java 1.5 in poi list.add(21); int i = (Integer) list.get(); Integer x = new Integer(23); Integer y = new Integer(4); // OK da Java 1.5 Integer z = x + y; 17 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; 18

Vector o ArrayList?! Vector o ArrayList: qual è il migliore e perché?! Qualche volta è meglio Vector ma altre è preferibile ArrayList, altre è meglio non usare nessuno dei due.! La risposta non è immediata perché dipende da che cosa si vuole fare.! Quattro sono i fattori da considerare per scegliere tra le due classi:! API! Sincronizzazione! Quantità e variazione del dato da trattare! Pattern d uso http://www.javaworld.com/javaworld/javaqa/2001-06/03-qa-0622-vector.html 19