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

Documenti analoghi
Astrazioni sul controllo. Iteratori

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

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati

Scope e visibilità per classi

Esercizi della lezione 5 di Java

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

Synchronized (ancora)

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

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

SAPIENZA Università di Roma, Facoltà di Ingegneria

Esonero del corso di Programmazione a Oggetti

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

Compute engine generici in RMI

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

Fondamenti di Informatica T1 Mappe

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

Telematica II 15. Esercitazione/Laboratorio 5

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:

Java Collection Framework

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

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

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Progettazione e sviluppo di un sistema software complesso. Lezione X

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

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

Realizzazione di una classe con un associazione

Dalle Classi Alle Interfacce

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

STRUTTURE DATI IN JAVA

Esercitazione sui Design Pattern

Corso Base. Lezione 6. Maurizio Cozzetto, Francesco Sarasini

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

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

WELCOME. Go to the link of the official University of Palermo web site Click on the box on the right side Login unico

Programmazione Orientata agli Oggetti in Linguaggio Java

SOA!= OO. Andrea Saltarello Software Managed Designs S.r.l. andrea.saltarello@manageddesigns.it

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

INTRODUZIONE INTRODUZIONE JAVA JAVA

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione ad oggetti

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

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Design Pattern in Java

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

Progettazione! Progettazione! Progettazione! Progettazione!

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Outline. Programmazione ad oggetti in Java. La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori

Corrado Aaron Visaggio Research Centre on Software Technology - RCOST University of Sannio Benevento, Italy

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

Definizione di classi con array di oggetti

Tipi astratti di dato e loro realizzazione in Java

Gruppi di Thread. Java threads (3) Gruppi di thread e Timer. Operating Systems. Operating Systems. Java threads 3. Java threads 3

Algoritmi di Ricerca. Esempi di programmi Java

Classi astratte. Master in Web Technology e Security luglio - settembre Interfacce

Corso Base. ActionSMS. Maurizio Cozzetto, Francesco Sarasini

Parola chiave extends

CEDMEGA Rev 1.2 CONNECTION TUTORIAL

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public:

Introduzione all ambiente di sviluppo

ORM: Approccio DAO. Versione preliminare. Antonella Poggi. Dipartimento di informatica e Sistemistica Sapienza Università di Roma

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

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

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

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

Per indicare la complessità asintotica si usa la notazione O-grande (Big-Oh):

Ingegneria del Software 1: Generici e Collezioni

Web Services con Axis Delia Di Giorgio Anna Celada 1 marzo 2005

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

UML Diagrammi delle classi. UML Diagramma classi 1

REGISTRATION GUIDE TO RESHELL SOFTWARE

Verso l architettura MVC-2 PHP: Hypertext Preprocessor

3. La sintassi di Java

Livelli di astrazione

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Ingegneria del Software

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

Programmazione ad Oggetti: JAVA. Esercitazione

RMI. Java RMI RMI. G. Prencipe

Uso di metodi statici. Walter Didimo

Prova d Esame Compito B

Aritmetica. Progetto dei programmi

Main System Monitor Keyboard

Eventi di azione. // con interfaccia per eventi di azione

Newborn Upfront Payment & Newborn Supplement

Programmazione Java: Come contenere oggetti

Esercizi classi e array

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).

Raffaella Brighi, a.a. 2005/06. Eventi e listener. Corso di Laboratorio II. A.A

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Programmazione Java: Variabili membro, Metodi La parola chiave final

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

Gestione delle eccezioni in Java

Applicazioni web. Parte 5 Socket

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

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

Transcript:

1 Fondamenti di Java hashcode

2 equals e hashcode Programmers should take note that any class that overrides the Object.equals method must also override the Object.hashCode method in order to satisfy the general contract for the Object.hashCode method. In particular, c1.equals(c2) implies that c1.hashcode()==c2.hashcode() (the vice versa need not be true)

3 equals e hashcode c1.equals(c2) => c1.hashcode()==c2.hashcode() c1.hashcode()==c2.hashcode() > c1.equals(c2) uguaglianza implica hashcode uguali diversità di hashcode implica non uguaglianza 3

4 equals e hashcode if ( c1.hashcode()!=c2.hashcode() ) c1 e c2 diversi if (c1.hashcode()==c2.hashcode() ) per sapere se c1 è uguale a c2 devo usare la equals E' un meccanismo di "fail quick" 4

5 esempio di hashcode() "ABBA" => 65+66+66+65 = 262 "ABBB" => 65+66+66+66 = 263 ma "ABAB" => 65+66+65+66 = 262 5

6 ATTENZIONE! As much as is reasonably practical, the hashcode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the Java programming language.) 6

7 Nel dubbio public int hashcode() { int hash = 0; return hash; Inefficiente, ma corretto! Per approfondimenti: http://eclipsesource.com/blogs/2012/09/04/the-3-things-youshould-know-about-hashcode/

8 A che serve hashcode? Tabelle associative chiave1 coda1 chiave2 coda2 Dato un oggetto O1 è possibile calcolarne la chiave C1 O1 O6 chiave3 coda3 O2 O5 O3...... O4

9 Esercizio Definire la classe "Automobile" con variabili di istanza Marca (es. VW), Tipo (Es, Golf), Colore (es. Bianco), Cilindrata (es. 1600), Targa, Proprietario. Identificare diversi scenari di uso che abbiano differenti scenari di "equals": - es. uno scenario in cui una Tipo e una Golf siano considerate "uguali", ed uno in cui due Golf di colore diverso sono considerate "uguali" - implementare la equals per i diversi scenari.

10 Esercizio Definire una hashcode corretta. Aggiungere tre diverse istanze di automobili "uguali" a un set, e controllare la dimensione del set ottenuto. Vi torna il valore ottenuto per la dimensione del set? Definire una hashcode non corretta. Aggiungere tre diverse istanze di automobili "uguali" a un set, e controllare la dimensione del set ottenuto. Vi torna il valore ottenuto per la dimensione del set? Potete spiegare quel che osservate?

11 Implementazione corretta public class Test { int a=0; Test(int k) {a=k; public boolean equals(test c){ if (c==null) return false; if (a==c.a) return true; return false; public int hashcode() {return 0; /* return a */ public static void main(string a[]){ Test k1=new Test(2); Test k2=new Test(2); Collection col=new HashSet(); col.add(k1); col.add(k2); System.out.println(col.size()); OUTPUT: 1

12 Implementazione sbagliata public class Test { int a=0; Test(int k) {a=k; public boolean equals(test c){ if (c==null) return false; if (a==c.a) return true; return false; public int hashcode() {return (int)(math.random()*100); public static void main(string a[]){ Test k1=new Test(2); Test k2=new Test(2); Collection col=new HashSet(); col.add(k1); col.add(k2); System.out.println(col.size()); OUTPUT: 2

13 Fondamenti di Java Collection: object ordering

14 Object ordering Ci sono due modi per ordinare oggetti: The Comparable interface provides automatic natural order on classes that implement it. The Comparator interface gives the programmer complete control over object ordering. These are not core collection interfaces, but underlying infrastructure.

15 Object ordering with Comparable A List l may be sorted as follows: Collections.sort(l); If the list consists of String elements, it will be sorted into lexicographic (alphabetical) order. If it consists of Date elements, it will be sorted into chronological order. How does Java know how to do this? String and Date both implement the Comparable interface. The Comparable interfaces provides a natural ordering for a class, which allows objects of that class to be sorted automatically.

16 Comparable Interface int compareto(object o) Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. Definisce l ordinamento naturale per la classe implementante.

17 Comparable public class Car implements Comparable{ public int maximumspeed=0; public String name; Car(int v,string name) {maximumspeed=v; this.name=name; public int compareto(object o){ if (!(o instanceof Car)) { System.out.println("Tentativo di comparare mele e pere!"); System.exit(1); if (maximumspeed<((car)o).maximumspeed) return -1; else return (1);

18 Comparable class TestCar{ List macchine=null; public static void main(string[] args) { new TestCar(); TestCar(){ macchine=new LinkedList(); Car a=new Car(100,"cinquecento"); macchine.add(a); Car b=new Car(250,"porsche carrera"); macchine.add(b); Car c=new Car(180,"renault Megane"); macchine.add(c); printmacchine(); Collections.sort(macchine); printmacchine();

19 Comparable void printmacchine(){ Iterator i=macchine.iterator(); while (i.hasnext()) { System.out.println(((Car)i.next()).name);

20 Comparable Interface Class Point implements Comparable { int x; int y;... int compareto(object p) { check if Point // ordino sulle y retval=y-((point)p).y; // a partità di y ordino sulle x if (retval==0) retval=x-((point)p).x; return retval; p1 p2 p1 <p2 p1 p2 p1 <p2

21 Comparator Interface int compare(t o1, T o2) Compares its two arguments for order. class NamedPointComparatorByXY implements Comparator { int compare (NamedPoint p1, NamedPoint p2) { // ordino sulle y retval=p1.y-p2.y; // a partità di y ordino sulle x if (retval==0) retval=p1.x-p2.x; return retval;

22 Comparator Interface class NamedPointComparatorByName implements Comparator { int compare (NamedPoint p1, NamedPoint p2) { //usa l ordine lessicografico delle stringhe return (p1.getname().compareto(p2.getname()));... In un metodo di un altra classe: // sia c una Collection di NamedPoints Comparator cmp1= new NamedPointComparatorByName(); Comparator cmp2= new NamedPointComparatorByXY(); List x = new ArrayList(c); Collections.sort(x,cmp1)

23 import Lettura java.util.*; di int class EmpComparator implements Comparator { public int compare(object o1, Object o2) { EmployeeRecord r1 = (EmployeeRecord) o1; EmployeeRecord r2 = (EmployeeRecord) o2; return r2.hiredate().compareto(r1.hiredate()); class EmpSort { EmpSort() { Collection employees =... ; // Employee Database List emp = new ArrayList(employees); Collections.sort(emp, new EmpComparator()); System.out.println(emp); public static void main(string args[ ]) {new EmpSort();

24 Sezione: Costruttori Costruttori

25 Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore A(); Se invece definisco almeno un costruttore non void, ad es. A(int s), il sistema non crea il costruttore A();

26 Definizione dei costruttori Se B è figlia di A, il costruttore di B come prima cosa invoca A(), a meno che la prima istruzione non sia una super. A() {... A(int k) {... B(int k) {... B(int k) { super(k)...

27 Invocazione dei costruttori public class A { public A() { System.out.println("Creo A"); public class B extends A { public B() { System.out.println("Creo B"); public B(int k) { System.out.println("Creo B_int ); Output: Creo A Creo B_int public static void main(string [] a) { B b=new B(1);

28 Invocazione dei costruttori public class A { public A(int k) { System.out.println("Creo A"); public class B extends A { public B() { System.out.println("Creo B"); public B(int k) { System.out.println("Creo B_int ); Output: ERRORE! Perchè? public static void main(string [] a) { B b=new B(1);