Equals, Hashcode und CompareTo Micha Kessler

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

Objektorientierte Programmierung
Objektorientierte Programmierung
Klassen - Verkettete Liste -
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Einführung in die Informatik: Programmierung und Software-Entwicklung
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Agenda Sitzung 2 für den Programmaufbau
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Zusammenfassung des Kapitels 8
der Universität Oldenburg
Verteilte Software - Java - Prozedurale Programmierung 1
Objektrelationales Mapping mit JPA Advanced Mapping Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Java: Dynamische Datentypen
Listen Richard Göbel.
Java: Grundlagen der Objektorientierung
Konstruktoren.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Dynamische Webseiten Java servlets.
Objektorientierte Programmierung JDK-Klassenbibliothek
Einführung in die OOP in Java
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum II.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Modulare Programmierung
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Einführung in die Programmierung Anweisungen und Datentypen
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Programmieren Kapitel 3 – Variablen.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Algorithmen und Datenstrukturen Übungsmodul 6
Primär(x)f(x)a[x]new typeof sizeof checked unchecked Unär+-~!++x--x x++ x-- (T)x Multip./Divis.*/% Addition/Subtr.+- shift > kleiner/größer = is gleich/ungleich==!=
Die Klasse String und ihre Methoden
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Arrays of Objects, a 3 part process
 Präsentation transkript:

Equals, Hashcode und CompareTo Micha Kessler

2 Equals Hashcode CompareTo Inhalt

3 Gibt an, ob zwei Objekte gleich sind Wir bei Collections benutzt Nicht sinnvoll zu überschreiben wenn: Logisches equals egal Jedes Element unterschiedlich Equals der Superklasse reicht Wird definitiv nicht benutzt Equals

4 Reflexiv x.equals(x) == true //x != null Symmetrisch x.equals(y) == y.equals(x) Problematisch bei Ober- und Unterklasse Transitiv x.equals(y) && x.equals(z) y.equals(z) Problematisch bei Ober- und Unterklasse Konsistent x.equals(y) jederzeit das gleiche Ergebnis Problematisch bei veränderlichen Objekten x.equals(null) == false Equals

5 public class Point{ private final int x; private final int y; public Point(int x, int y){ this.x=x; this.y=y; public boolean equals (Object o){ if(!(o instanceof Point)) return false; Point p = (Point) o; return p.x == x && p.y == y; } Equals Beispiel

6 public class ColorPoint extends Point{ private final Color color; public ColorPoint(int x, int y, Color color){ super(x,y); this.color = color; public boolean equals (Object o){ if(!(o instanceof ColorPoint)) return false; return super.equals(o) && ((ColorPoint) o).color == color; } Equals Beispiel

7 Symmetrie gebrochen: Point p = new Point(1,4); ColorPoint cp = new ColorPoint(1,4,Color.RED); p.equals(cp) != cp.equals(p); Equals Beispiel

public boolean equals (Object o){ if(!(o instanceof Point)) return false; if(!(o instanceof ColorPoint)) return o.equals(this); return super.equals(o) && ((ColorPoint) o).color == color; } Equals Beispiel

9 Transitivität verletzt: Point p = new Point(1,4); ColorPoint cp1 = new ColorPoint(1,4, Color.RED); ColorPoint cp2 = new ColorPoint(1,4, Color.BLUE); cp1.equals(p) -> true cp2.equals(p) -> true Aber: cp1.equals(cp2) -> false Equals Beispiel

public boolean equals (Object o){ if(o == null || o.getClass() != getClass()) return false; Point p = (Point) o; return p.x == x && p.y == y; } Equals Beispiel

11 Liskovsches Substitutionsprinzip: Eigenschaften, die anhand der Spezifikation des vermeintlichen Typs eines Objektes bewiesen werden können, sollten auch dann gelten, wenn das Objekt einem Untertyp dieses Typs angehört. Gemischter Aufruf false Equals Beispiel

public boolean equals (Object o){ if(!(o instanceof Point)) return false; Point p = (Point) o; return p.canEquals(this) && p.x == x && p.y == y; } protected boolean canEquals(Object o){ return o instanceof Point; } Equals Beispiel

public boolean equals (Object o){ if(!(o instanceof ColorPoint)) return false; ColorPoint cp = (ColorPoint) o; return cp.canEquals(this) && super.equals(cp) && cp.color == color; protected boolean canEquals(Object o){ return o instanceof ColorPoint; } Equals Beispiel

14 Liefert einen Integer-Wert Gleiche Objekte liefern immer den gleichen Wert Unterschiedliche Objekte können den gleichen Wert liefern Hashcode

15 Wenn equals überschrieben wird hashCode überschreiben Wichtig für HashTable, HashMap und HashSet zwei gleiche Elemente (x.equals(y) == true) können unterschiedliche Hashwerte haben werden nicht gefunden Alle Elemente, die bei equals eine Rolle spielen, verwenden Gute Verteilung Hashcode

16 Felder umrechnen boolean: (f ? 1: 0) byte, char, short, int: (int) f long: (int) (f^(f>>>32)) float: Float.floatToIntBits(f) double: Double.doubleToLongBits(f) wie long Object: rekursiv f.hashcode() null 0 Hashcode Schema

public int hashcode(){ int result=5; result = 31 * result + zahl1; result = 31 * result + zahl2; result = 31 * result + feld1.hashcode(); return result; } Hashcode Schema

18 private volatile int public int hashcode(){ int result = hashCode; If(result == 0){ result = 5; result = 31 * result + zahl1; result = 31 * result + zahl2; result = 31 * result + feld1.hashcode(); hashCode = result; } return hashCode; } Hashcode Schema(Cache)

19 public interface Comparable { int compareTo(T t); } Rückgabewert positiv, null oder negativ, wenn das Element kleiner, genau so groß oder größer ist als das this Objekt ClassCastException wenn der Typ nicht stimmt NullPointerException wenn null übergeben wird Schafft eine Natürliche Ordnung Wichtig für interne Aufrufe bei Sortieralgorithmen und Baumstrukturen (z.B. TreeSet, Collections.sort, Array.sort, PriorityQueue, PriorityBlockingQueue, EnumSet) CompareTo

20 Reflexiv x.compareTo(x) == 0 Symmetrisch sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) Gilt auch für Exceptions Transitiv sgn(x.compareTo(y)) > 0 && sgn(y.compareTo(z)) > 0 sgn(x.compareTo(z)) > 0 x.compareTo(y) == 0 sgn(y.compareTo(z)) == sgn(x.compareTo(z)) Sollte auch Konsistent zu equals sein (x.compareTo(y) == 0) == (x.equals(y)) CompareTo

21 Micha Kessler Kontakt next-level-integration.com