Map<K,V> ESERCITAZIONE. Dalla documentazione Java 02/04/15

Documenti analoghi
Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map

Maps. a.k.a, associative array, map, or dictionary

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

Metodi di una Collection

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

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash

Le gerarchie di 3pi PR

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

Gerarchie e polimorfismo: liste

Passi metologici VERIFICA ADT. ! Obie4vo: sviluppare codice corre;o. ! Noi consideriamo il passi 1 e 2 5/18/13

Implementare un'interfaccia

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A I/O, thread, socket in Java

Finite Model Theory / Descriptive Complexity: bin

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Programmazione 2 - Marco Ronchetti. Fondamenti di Java. Fac.Scienze Università di Trento. Static

Java: tipi (im)mutaibili. Metodi equals e clone

Collezioni ALBERTO FERRARI

Le gerarchie di tipi PR

Invariante di Rappresentazione

Il principio di sostituzione

Esercitazione di lunedì - TUTTE LE MATRICOLE -

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

Un esempio: le liste ordinate di interi

Invariante di Rappresentazione

Esercizio: Lista Circolare

Le gerarchie di tipi 1

AA Le gerarchie di -pi

Abstract Data Types PR

Astrazioni sul controllo. Iteratori

Albero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java

Le gerarchie di tipi: implementazioni multiple e principio di sostituzione

PROGRAMMING BY CONTRACT

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

Generics & Collections

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

Polimorfismo parametrico vs polimorfismo per inclusione

Astrazione sul controllo: gli iteratori

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

Programmazione a Oggetti. Astrazione sui Dati e Iteratori

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1

Attraversamento di un albero (binario)

PROGRAMMAZIONE II Seconda Valutazione Intermedia 29 Maggio Si consideri la specifica parziale di una gerarchia di classi:

Politecnico di Milano

Commenti per documentare il codice (doc comments) I commenti speciali devono essere delimitati da /**... */.

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Un iteratore per le s-espressioni

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

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

ADT albero binario completo

Implementazione Java di un ADT

Uso di Asserzioni alla Hoare nei Linguaggi O.O. Java Modeling Language

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

Esercitazione: liste ordinate di interi

Il linguaggio Java. La superclasse universale Object

UML: Aggregazione. class A { int s; public void sets(int){ }; public int gets() { }; class B {A ob; public void usea() { }; }

Iteratori: mo+vazioni

Corso di laurea triennale in Informatica Turno A

Le Collezioni (Java Collections)

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Si faccia riferimento all Allegato A - OPS 2016, problema ricorrente REGOLE E DEDUZIONI, pagina 2.

Richiami Java e Arrays

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

JSON JavaScript Object Notation. Sistemi Informativi Aziendali A.A. 2012/2013

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

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

Il Linguaggio Java. La superclasse universale Object

Anno Scolastico

Database support Prerequisites Architecture Driver features Setup Stored procedures Where to use. Contents

Esercizio. Strutture Dati

Alberi Binario in Java

Stringhe. Prof. Lorenzo Porcelli


Diagramma delle classi UML

Uguaglianza e Identità. (no, non avete sbagliato corso )

Qui u ck c k PE P R E L

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

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

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

Algoritmi e Strutture Dati. Lezione 5

Politecnico di Milano

Progettazione del Software Anno Accademico

Constant Propagation. A More Complex Semilattice A Nondistributive Framework

Introduzione al Java Collections Framework. Progettazione del Software Anno Accademico Interfacce del Collections Framework

La Serializzazione in Java. L24_Serialization 1

IMPLEMENTAZIONE DI UN ALBERO AVL

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

LDL come target per il controllo della dislipidemia HIV-correlata

Metodo di costruzione di un albero di copertura minimo

Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti

Tecniche di Progettazione: Design Patterns

CloneNotSupportedException clone() Object clone() protected native Object clone() throws CloneNotSupportedException this

java.util.map ALBERTO FERRARI

Transcript:

ESERCITAZIONE Map<K,V> Dalla documentazione Java o public interface Map<K,V> o An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. o h-ps://docs.oracle.com/javase/8/docs/api/java/ u@l/map.html 1

Il metodo put di Map<K,V> V put(k key, V value) o associates the specified value with the specified key in this map (opjonal operajon). If the map previously contained a mapping for the key, the old value is replaced by the specified value. (A map m is said to contain a mapping for a key k if and only if m.containskey(k) would return true.) Parameters: o key - key with which the specified value is to be associated o value - value to be associated with the specified key Returns: o the previous value associated with key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with key, if the implementajon supports null values.) Throws: o UnsupportedOperaJonExcepJon - if the put operajon is not supported by this map o ClassCastExcepJon - if the class of the specified key or value prevents it from being stored in this map o NullPointerExcepJon - if the specified key or value is null and this map does not permit null keys or values o IllegalArgumentExcepJon - if some property of the specified key or value prevents it from being stored in this map Il metodo put: specifica @param key: o Il parametro key della coppia da inserire @param value: o Il parametro value of della coppia da inserire @requires key!= null @modifies this @effects <key, value> viene inserita in this o se una associazione per key era già presente in this si sosjtuisce il vecchio campo valore con il valore del parametro value @return il vecchio valore associatao con key, se era presente una associazione, altrimenj null @throws: non le discujamo 2

Map<K,V>: implementazione Supponiamo di implementare l astrazione Map con una coppia di liste public class pr2map<k,v> { // instance variables private List<K> keys; private List<V> values; // costruttore public pr2map( ) { keys = new ArrayList<K>( ); values = new ArrayList<V>( ); ArrayList public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable Resizable- array implementajon of the List interface. Implements all opjonal list operajons, and permits all elements, including null. In addijon to implemenjng the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.) h_p://docs.oracle.com/javase/8/docs/api/java/ujl/ ArrayList.html 3

Map<K,V> Clausola Overview o collezione modificabile, non ordinata di coppie <key, value> che implementano una funzione tra insiemi di chiave e valori o elemento Jpico: ovvio Nota: implementare una funzione implica che nella stru_ura non esistono due coppie della forma <k,v1>, <k,v2> Funzione di astrazione pr2map è un insieme di coppie <key,value>. AF= {<key,value> tali che for 0 <= i < keys.size( ), keys.get(i)= key && values.get(i) = value 4

Invariante di rappresentazione keys!= null && values!= null && keys.size( ) == values.size( ) && for 0 <= i < keys.size( ), <keys.get(i), values.get(i)> in AF(c) && for 0 <= i, j < keys.size( ),! (i = j) è!(keys(i).equals(keys(j))) Invariante di rappresentazione Da aggiungere all invariante per essere maggiormente realisjci o gli elemenj di key devono essere diversi da null o gli elemenj di value devono essere diversi da null 5

Implementazione di put public V put(k key, V value) { int loc = indexof(key); if (loc!= - 1) { V result = values.get(loc); values.set(loc, value); return result; keys.add(key); values.add(value); return null; private int indexof(k key) { for (int i = 0; i < keys.size (); i++) if (key.equals(keys.get(i))) return i; return - 1; put Preserva invariante di rappresentazione? Due casi da considerare. Quali? 6

GetKey() Implementazione public List<K> getkeys( ) { return keys; Debugging dell astrazione La rappresentazione è visibile all esterno dell astrazione? o si: il metodo getkeys( ) resjtuisce come risultato la lista delle chiavi presenj nell astrazione o il codice cliente può pertanto operare dire_amente sulle chiavi Soluzione: resjtuire una coppia delle chiavi tramite l introduzione di un metodo clone che effe_ua una deep copy o implementare clone( ) per esercizio 7

Estensione Aggiungere un metodo che perme_e di o_enere il valore associato ad una chiave Signature o public V get(k key) Come viene specificato? /** SPEC A * @requires key diverso da null & key è presente in this * @effects resjtuisce il valore associato con la chiave key */ /** SPEC B * @key è presente in this * @effects resjtuisce il valore associato con la chiave key * @throws NullPointerExcepJon se key è null */ /** SPEC C * @effects resjtuisce il valore associato con la chiave key se * key è presente in this * oppure null se key non ha associato alcun valore in this */ /** SPEC D * @effects resjtuisce il valore associato con la chiave key * @throws NullPointerExcepJon se key è null * / 8

// implementazione 1: public V get(k key) { return values.get(indexof(key)); // implementazione 2: public V get(k key) { if (key==null) throw new NullPointerExcepJon("null key passed to get"); return values.get(indexof(key)); // implementazione 3: public V get(k key) { if (key == null indexof(key) == - 1) return null; return values.get(indexof(key)); // implementazione 4: public V get(k key) { if (key == null) throw new NullPointerExcepJon("null key passed to get"); if (indexof(key) == - 1) throw new NoSuchElementExcepJon("key not found"); return values.get(indexof(key)); 9

Verifica specifica SPEC A SPEC B SPEC C SPEC D IMPL1 IMPL 2 IMPL 3 IMPL 4 Verifica specifica IMPL1 IMPL 2 IMPL 3 IMPL 4 SPEC A OK SPEC B OK OK SPEC C OK OK SPEC D OK OK OK 10

TesJng per Put? 11