Javakurs FSS 2012 Lehrstuhl Stuckenschmidt

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
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 Programmierung Zusammenfassung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Sortieren mit Binären Bäumen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Konstruktoren.
Objekte und Arbeitsspeicher
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. 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.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
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 Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
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
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Informatikunterricht mit Java
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Informatik 1 Letzte Übung.
Equals, Hashcode und CompareTo Micha Kessler
Dynamische Datentypen
Variablenkonzept Klassisch, in Java Basistyp
Die Klasse String und ihre Methoden
Aufruf einer Methode eines Objektes vom Typ „Bruch“
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
EPROG Tutorium #5 Philipp Effenberger
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs Übung Besprechung der Hausaufgabe
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Java Programme nur ein bisschen objektorientiert.
Zwei Denkansätze zur Klasse Schlange
Aufgaben zu Rückgabewerten
 Präsentation transkript:

Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 4 – ArrayList, PriorityQueue, HashSet und HashMap

Array List Dynamisches Array ArrayList vertritt ein Array mit variabler Länge Kapazität passt sich automatisch an ArrayList wird selbstständig vergrößert 1 2 3 34 12 17 22

Array List ArrayList<E> Generische Datentypen Ermöglicht es unterschiedliche Datentypen zu verwenden Implementierung findet Typ unabhängig statt class Box<E>{ E val; void setVal(E val){ this.val = val; } E getVal(){ return val;

Array List ArrayList<E> Box für Zahlen? Boolsche Werte?? Generische Datentypen müssen Objekte sein String, DeinObjekt... Primitive Datentypen nicht verwendbar int, boolean, char... Box für Zahlen? Boolsche Werte?? Box<String> stringBox = new Box<String>(); Box<DeinObjekt> deineOBox = new Box<DeinObjekt>();

Wrapperklassen Objekte primitiver Datentypen Wrapper-Objekte nehmen primitive Datentypen auf Verfügen über zusätzliche Funktionen Wrapperklasse Primitver Datentyp Byte byte Short short Integer int Long long Float float Double double Boolean boolean Character char

Wrapperklassen Erzeugen von Wrapper-Objekten Wrapper-Objekte sind final Konstruktoren Funktionen Wert verändern Integer(int i) Integer(String s) toHexString(int i) toDoubleValue() Integer i = new Integer(4); i = new Integer(i.intValue()+1);

Autoboxing Boxing und Unboxing Primitive Datentypen <-> Wrapper-Objekte Boxing: Erstellen eines Wrapper-Objektes Unboxing: Beziehen des Wertes aus einem Wrapper-Objekt Interger i = 42; i = i + 15; //Unboxing & Boxing int k = i; k = i + 3;

Autoboxing Vorsicht Probleme mit == Erwartet keine primitiven Datentypen Daher kein Unboxing Referenzvergleich – comparedTo, equals() Integer i = 128; Integer j = 128; System.out.println( i >= j); System.out.println( i <= j); System.out.println( i == j); true false

Array List Erstellen einer ArrayList Datentyp festlegen Kapazität festlegen Elemente einfügen ArrayList<Integer> liste; liste = new ArrayList<Integer>(4); liste.add(10); liste.add(3,15); liste.add(12); 1 2 3 10 15 12

Array List Kapazität und Länge Kapazität Länge Kapazität ≥ Länge Felder die insgesamt zur Verfügung stehen Länge Felder die Belegt werden Kapazität ≥ Länge 1 2 3 10 15 12

Array List Kapazität Viele Funktionen für die Kapazität Kapazitätsmanagement beeinflusst Schnelligkeit ArrayList wird um das 1,5 Fache vergrößert ArrayList(int initialCapacity) ensureCapacity(int minCapacity) trimToSize() 1 2 3 10 15 12

Array List Einfügen von 8 Elementen ArrayList<Integer> liste; liste = new ArrayList<Integer>(2); liste.add(10); liste.add(15); liste.add(13); liste.add(22); liste.add(17); liste.add(28); liste.add(31); liste.add(20); 1 2 3 4 5 6 7 10 15 13 22 17 28 1 2 3 4 5 6 7 10 15 13 22 17 28 1 2 3 4 5 6 7 10 15 13 22 17 28 31 1 2 3 4 5 6 7 10 15 13 22 17 1 2 3 4 5 6 7 10 15 13 22 17 28 31 20 1 2 3 4 5 6 7 10 15 13 22 17 28 31 1 2 3 4 10 15 13 22 1 2 3 4 10 15 13 22 17 1 2 3 4 10 15 13 22 17 1 2 3 4 10 15 13 1 2 3 4 10 15 13 22 1 2 10 15 13 1 2 10 15 1 2 10 15 13 1 1 10 15 1 10 1 10 15 1 10 1 2 3 4 5 6 7 1 2 3 4 5 6 7 10 15 13 22 17 1 2 3 4 5 6 7 10 15 13 22 17 1 2 3 4 10 15 13 1 2 3 4 10 15 13 1 2 3 4 1 2 1 2 10 15 1 2 10 15

Array List Lösung: Einfügen von 8 Elementen ArrayList<Integer> liste; liste = new ArrayList<Integer>(2); liste.add(10); liste.ensureCapacity(8); liste.add(15); liste.add(13); liste.add(22); liste.add(17); liste.add(28); liste.add(31); liste.add(20); 1 2 3 4 5 6 7 10 1 2 3 4 5 6 7 10 15 1 2 3 4 5 6 7 10 15 13 1 2 3 4 5 6 7 10 15 1 10 1 1 10 1 2 3 4 5 6 7 10 1 2 3 4 5 6 7 1 2 3 4 5 6 7 10

Array List Lösung: Einfügen von 8 Elementen ArrayList<Integer> liste; liste = new ArrayList<Integer>(8); liste.add(10); liste.add(15); liste.add(13); liste.add(22); liste.add(22); liste.add(17); liste.add(28); liste.add(31); liste.add(20); 1 2 3 4 5 6 7 1 2 3 4 5 6 7 10 15 13 1 2 3 4 5 6 7 10 1 2 3 4 5 6 7 10 15 1 2 3 4 5 6 7 10 1 2 3 4 5 6 7 10 15

Array List Löschen von Elementen ArrayList<Integer> liste; liste = new ArrayList<Integer>(); liste.add(10); liste.add(15); liste.add(12); liste.remove(1); 1 10 12 1 2 10 12 1 2 10 15 12 1 2 10 15 12

Array vs. ArrayList - feste Länge - primitive Datentypen - weniger Funktionen - ein einziger Datentyp - variable Länge - keine primitiven Datentypen - mehr Funktionen - mehrer Datentypen möglich

Hashing Hashverfahren Algorithmus zum Suchen von Datenobjekten Berechnung eines Hashwertes durch Hashfunktion Hashwert fungiert als Index und „Fingerabdruck“ Jedes Objekt hat einen eigenen Hashwert Key Hashwert Hash- funktion Tim 84088

Hash Map HashMap<K,V> Speichert Key-Value Paare Der Wert wird unter dem Schlüssel abgelegt Schlüssel müssen eindeutig sein z.B. String, Integer (id) Key Bucket Value 1 150 Christian Hash- funktion 2 Thorsten 3 1 000 000 Tim 4 50 5

Hash Map Erstellen einer HashMap K-V Typen festlegen Paare einfügen mit put(K,V) HashMap<String,Integer> kontos; kontos = new HashMap<String,Integer>(); kontos.put(“Christian“,1000000); kontos.put(“Thorsten“,150); kontos.put(“Tim“,50); 1 150 Christian Hash- funktion 2 Thorsten 3 1 000 000 Tim 4 50 5

Hash Map Kollision Zwei unterschiedliche Schlüssel Trotzdem selber Hashwert! Kollisionsauflösung durch Verkettung Key Bucket Value 1 150 Christian Hash- funktion 2 Thorsten 3 1 000 000 Tim 4 5 50

Hash Map Offenes Potential Eigene Objekte als Value! Bsp: Aktienobjekte mit Informationen Name, Kurs, Werte... HashMap<String,Aktie> daxAktien; daxAktien = new HashMap<String,Aktie>(); daxAktien.put(“ADS.DE“,adidas); daxAktien.put(“MEO.DE“,metro); daxAktien.put(“HEI.DE“,heidelbergCement); ...

Hash Map Objekte aufgepasst Veränderungen wirken sich auf die Hash Map aus Dateninkonsistenz class MeinInt{ int wert; public MeinInt(int i) { wert = i; } MeinInt zahl = new MeinInt(13); HashMap<String, MeinInt> map; map = new HashMap<String, MeinInt>(); map.put("Tim", zahl); zahl.wert = 42; System.out.println(map.get("Tim").wert);

Hash Map Objekte aufgepasst Bei Wrapperklassen unproblematisch Neues Objekt anlegen! Hier durch Autoboxing Integer zahl = new Integer(13); HashMap<String, Integer> map; map = new HashMap<String, Integer>(); map.put("Tim", zahl); zahl = 42; System.out.println(map.get("Tim").wert);

Hash Map Daten auslesen Findet den Wert mit Hilfe des Schlüssels Wert kann auch null sein Niklas vorhanden ohne Konto? Nicht vorhanden? Konsolenausgabe konten.get(“Tim“); konten.get(“Niklas“); 50 null

Hash Map Daten auslesen HashMap erlaubt null als Schlüssel oder Wert Unklar ob Eintrag vorhanden oder nicht Konsolenausgabe konten.containsKey(“Tim“); konten.containsKey(“Niklas“); true false

Hash Map vs Hash Table Hash Table Synchronized Akzeptiert keine null Werte/Schlüssel

Hash Set Menge (eng. Set) Jedes Element darf nur einmal vorkommen Keine Methode zum Auslesen Erweiterte for Schleife Konsolenausgabe HashSet<String> hSet = HashSet<String>(); System.out.println(hSet.add(“Hallo“)); true false

Hash Set Mengenoperatoren Vereinigung mit addAll(Collection c) Schnittmenge mit retainAll(Collection c) Teilmenge mit containsAll(Collection c) menge1.add(1); menge2.add(2); menge2.add(1);

Hash Set Durchlaufen Erweiterte for Schleife Durchläuft Objekte vom Typ Iterable Vorsicht HashSet ist nicht sortiert! for(int i : hSet){ System.out.println(i); }

Priority Queue Warteschlange Sortiert Generische Warteschlange PriorityQueue<Integer> queue; queue = new PriorityQueue<Integer>(); queue.add(10); queue.add(15); queue.add(12); queue.add(7); Kopf 7 10 12 15

Priority Queue Vergleichen von Objekten Comparable Comparator „Natürliche Sortierung“ Comparator Muss explizit angegeben werden PriorityQueue<Integer> queue; queue = new PriorityQueue<Integer>(); PriorityQueue<Integer> queue; queue = new PriorityQueue<Integer>(11,myComparator);

Priority Queue Comparable compareTo(T o) überschreiben Objekt kann sich selbst mit anderen Objekten vergleichen Umsetzung von nur einem Sortierkriterium Muss in der selben Klasse sein public int compareTo(MeinInt o) { if(this.wert < o.wert) return -1; else if(this.wert > o.wert) return 1; else return 0; }

Priority Queue Comparator compare(T o1, T o2) überschreiben Objekt können verglichen werden Mehrer Sortierkriterien möglich durch Extraklassen Muss nicht in der selben Klasse sein! public int compare(MeinInt o1, MeinInt o2) { if(o1.wert < o2.wert) return -1; else if(o1.wert > o2.wert) return 1; else return 0; }

Priority Queue Auf Elemente zugreifen peek() poll() Holt das oberste Element ohne es zu löschen poll() Holt das oberste Element und löscht es System.out.println(queue.peek()); System.out.println(queue.poll()); 7 10 Kopf 7 10 12 15

Fragen?