Esempio su strutture dati dinamiche: ArrayList

Documenti analoghi
Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList

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

Corso sul linguaggio Java

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

Alberi Binari Alberi Binari

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

SOMMARIO STACK. STACK: specifica STACK

Fondamenti di Informatica T-1

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

Programmazione in Java Parte II

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

Array. Definizione e utilizzo di vettori

Esercizio: Lista Circolare

Algoritmi e strutture dati

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

E21 Esercizi sulle collezioni in Java

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni

Corso sul linguaggio Java

Il linguaggio Java: aggiunte in Java 1.5

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

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

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

ESERCIZIO 1 ESERCIZIO 1

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

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

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI

Eccezioni Precisazioni e approfondimenti

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

Introduzione Programmazione Java

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

Automazione di test. Si presuppone la conoscenza del documento XML.pdf. Un package per i test automatizzati

Corso di Reti di Calcolatori L-A

Programmazione Orientata agli Oggetti in Linguaggio Java

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

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

Prova d Esame Compito A

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

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

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

Tipi di dati astratti

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso sul linguaggio Java

Array. In Java un array è un oggetto senza metodi, con attributo pubblico length che memorizza la dimensione dell array

Laboratorio di Programmazione 1 [Java]

Array. Walter Didimo

Richiami Java e Arrays

{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

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

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

La gestione delle eccezioni

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

Prova d Esame Compito A

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

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

Esercitazione Fondamenti di informatica 2

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso

Laboratorio di Sistemi Ordinamento di oggetti Java

Testo di Riferimento (usato nei corsi precedenti)

public String tostring(){ return (riga +" " + colonna +" " + valore); } }//end class terna

E17 Esercizi sugli Array in Java

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

Metodi di una Collection

Le basi del linguaggio Java

Laboratorio di sistemi Strutture dati ricorsive (2) Java

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

Collezione di oggetti: Array List

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

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

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

Laboratorio di Programmazione 1 [Java]

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

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

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

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

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

Esonero del corso di Programmazione a Oggetti

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

System.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");

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

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

Corso di Reti di Calcolatori T

Fondamenti di Informatica T-1. Collezioni

Programmazione Orientata agli Oggetti in Linguaggio Java

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

RTTI Run-time type identification

// Costante utilizzata per definire il numero massimo di serie che il programma può generare.

Laboratorio di Programmazione 1 [Java]

E9 Esercizi sul Capitolo 9 Array

Fondamenti di Informatica T-1. Collezioni

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

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

Collezioni. (a cura del Prof. Marco Patella)

Generics & Collections

Transcript:

Esempio su strutture dati dinamiche: ArrayList 1 ArrayList 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 IndexOutOfBoundsException (se l indice è fuori dal range (index < 0 index > size())). 2 1

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 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 2

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 3

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 4

Esempio 1 (JCF classica) 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 l elemento nella posizione specificata 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)); Esempio di JCF classica : v potrebbe contenere qualsiasi tipo di oggetti 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 1 (JCF generica) Esempio di import java.util.arraylist; JCF generica : indico esplicitamente che v è un public class EsempioArrayList array di stringhe public static void main(string[] args) List<String> v = new ArrayList<String>(); 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"); 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 = v.get(0); non serve più il cast 11 5

Esempio 2: uno stack senza limiti Si realizzi una classe MyStack 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 mainche inserisca nello stack due stringhe e poi le estragga dallo stack per stamparle a video. 12 Esempio 2: uno stack senza limiti import java.util.*; //classe che definisce uno STACK GENERICO public class MyStack<T> //public class MyStack //JCF classica //private ArrayList st; private List<T> st; //public MyStack() st = new ArrayList(); public MyStack() st = new ArrayList<T>(); //public void push(object item) st.add(item); public void push(t item) st.add(item); 13 6

Esempio 2: uno stack senza limiti //public Object pop() public T pop() if (!st.isempty()) return st.remove(st.size()-1); else return null; public int getcount() return st.size(); 14 Esempio 2: uso dello stack public class EsempioStack public static void main(string[] args) //MyStack s = new MyStack(); //JCF classica MyStack<String> s = new MyStack<String>(); s.push("ciao"); s.push("arrivederci!"); String x; //x = (String)s.pop(); x = s.pop(); //non serve il cast perchè è stato specificato il tipo di oggetti dello Stack all atto della creazione System.out.println(x); //x = (String)s.pop(); x = s.pop(); System.out.println(x); 15 7

Esercizio 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. 16 Esercizio 3: uso dello stack con input JCF generica import java.io.*; public class EsempioStack_IO public static void main(string[] args) MyStack<String> s = new MyStack<String>(); try BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); PrintWriter output = new PrintWriter(new FileWriter("test.txt")); String word = input.readline(); //leggo la prima riga while(!word.equals("")) s.push(word); word = input.readline(); //continuo a leggere input.close(); //estrazione word = s.pop(); //pop restituisce null se lo stack è vuoto 18 8

Esercizio 3: uso dello stack con input JCF generica while(word!=null) System.out.println("> "+word); //stampo a video output.println(word); //stampo su file word = s.pop(); output.close(); catch (Exception e) System.err.println(e); 19 9