Javakurs für Fortgeschrittene

Ähnliche Dokumente
OCP Java SE 8. Collections

Programmierkurs Java

Kapitel 6: Java Collection Teil I

java.util. Sebastian Draack Department Informations- und Elektrotechnik Department Informations- und Elektrotechnik JAVA Collection-API

JAVA KURS COLLECTION

Kapitel 7: Java Collection Teil I

Einführung in die Programmierung mit Java

Programmieren in Java

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Grundkonzepte java.util.list

19 Collections Framework

Vorlesung Programmieren

Objektorientierte Programmierung. Kapitel 21: Einführung in die Collection Klassen

Einstieg in die Informatik mit Java

Java Collections Framework (JCF)

19 Collections Framework

12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält.

II.4.6 Collections - 1 -

Mengen und Multimengen

Mengen und Multimengen

Programmierkurs Java

Programmieren in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java

XIII: Verkettete Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper

Programmiertechnik II

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Programmiertechnik II

Objektorientiertes Programmieren mit Java

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

Java Einführung Collections

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen

Collections. Arthur Zaczek. Nov 2015

Kapitel 5: Iterierbare Container

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Programmiertechnik II

Programmieren in Java

Collections. Arthur Zaczek

Programmieren I. Kapitel 13. Listen

Programmieren in Java

Propädeutikum Programmierung in der Bioinformatik

Software Entwicklung 1

Nützliche Utility-Klassen des JDK

Teil V. Generics und Kollektionen in Java

ALP II Dynamische Datenmengen Datenabstraktion

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Info B VL 14: Java Collections/Reflections

Vorlesung 07: Collections. Peter Thiemann SS 2010

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]

Grundlagen der Informatik Generische Klassen

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Datenstrukturen. Ziele

Algorithmen und Datenstrukturen CS1017

17. Java Collections. Daten Organisieren. Generische Liste in Java: java.util.list. Typ Parameter (,,Parametrischer Polymorphisums )

Programmieren in Java

Programmieren 2 16 Java Collections und Generizität

Grundlagen der Informatik 0

Collections. Datamining und Sequenzanalyse. Marvin Meusel, Bertram Vogel

Collections und Iteratoren ListIterator Sets. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 22

Programmieren II. Hierarchie von Collections. Vorlesung 3. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2010

Wo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 338

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

Software Entwicklung 1

Nachtrag: Vergleich der Implementierungen von Stack

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock.

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig?

Teil IV. Grundlegende Datenstrukturen

Javakurs für Fortgeschrittene

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Die Java - Collections API

Abstrakte Datentypen und Java

1. Die rekursive Datenstruktur Liste

12.3 Ein Datenmodell für Listen

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

Programmieren 2 Übung Semesterwoche 2

4.2 Daten und Datenstrukturen

ALP II Dynamische Datenmengen

II.4.4 Exceptions - 1 -

ADT: Java Collections und ArrayList

Kapitel 14: Collections und Generics Software Entwicklung 1

Grundkurs Informatik. Viele Schränke bilden eine Schrankwand

12. Dynamische Datenstrukturen

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Transkript:

Javakurs für Fortgeschrittene Einheit 09: Weitere Datenstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Heutige Agenda Datenstrukturen Motivation Die Collection API Interface Collection<E> Überblick Konkrete Datenstrukturen Listen Mengen Schlangen Stack Abbildungen Praxis: Black Jack (17 und 4) Lernziele Weitere und komplexere Datenstrukturen kennenlernen Listen verstehen und anwenden/implementieren können Konzepte von Schlangen und Abbildungen verstehen 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 2

Geeignete Strukturierung der Daten ermöglicht erst eine effiziente Verarbeitung: Die Datenstruktur: Motivation Modell zur Speicherung und Verwaltung von Daten Bsp.: Arrays, Listen, Schlangen, Bäume, usw. Beschreibt die Organisation der Daten, also auch die Operationen Beschreibung durch Interfaces (konkrete Implementierung verborgen) Prinzip: Trennung von Beschreibung und Umsetzung Konkrete Implementierungen von Datenstrukturen beeinflussen nur Metriken wie Performance, Speicherplatzbedarf, Thread-Sicherheit, etc. Datenstruktur Interface Implementierung Liste List<E> ArrayList, LinkedList, Menge Set<E> HashSet, TreeSet, Abbildung Map <K,V> HashMap, TreeMap Schlange Queue<E> ArrayDeque, DelayQueue 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 3

Die Collection API Die Collection API regelt den Umgang mit den wichtigsten Datenstrukturen durch 4 Prinzipien: Schnittstellen: Definition der Datenstruktur Bsp.: List, Map, Set, Abstrakte Basisklassen: Minimale Anzahl an abstrakten Methoden AbstractList, AbstractSet, Konkrete Klassen: Implementieren (u. erweitern) die Grundoperationen auf den Datenstrukturen Bsp.: ArrayList, LinkedList, Algorithmen Sortieren, Suchen, etc. Die Collection API definiert: das Interface Collection<E> für alle Arten von Sammlungen (Listen, Mengen, Schlangen) Das Interface Map<K,V> für endliche Abbildungen 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 4

Collection erweitert das Interface Iterable und definiert die Basis-Methoden für alle Arten von (endl.) Sammlungen : Einfügen: add(element) addall(collection) Erfragen: contains(object) equals(object) size() Löschen: remove(object) Interface Collection removeall(collection) Quelle: http://openbook.rheinwerkverlag.de/javainsel9/bilder/collectionuml.gif 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 5

Einschub: Interface Iterable Das Interface Iterable definiert die Methoden: foreach(consumer<? super T> action) iterator() spliterator() Ein Objekt, welches Iterable implementiert kann das Ziel einer for-each- Schleife sein. Alle Collection-Klassen implementieren Iterable und damit kann eine foreach-schleife immer über diese Sammlungen laufen: Collection<String> c = new LinkedList<String>(); for ( String s : c ) System.out.println( s ); ArrayList<Double> mylist = new ArrayList<Double>(); for (double d : mylist) //do something 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 6

Iterator Mit einem Iterator können wir sequentiell durch die Daten einer Collection wandern. Iface Iterator bzw. Enumeration Mit Aufruf iterator() erhalten wir den entspr. Interator Mit der statischen Methode enumeration( Collection<T> c ) aus dem Paket java.util.collections erhalten wir den Enumeration<T> Mit Aufruf von hasnext() bzw. hasmoreelements() können wir prüfen, ob es ein weiteres Element gibt. Mit Aufruf von next() bzw. nextelement() erhalten wir ein weiteres Element der Datenstruktur Übergehen wir ein false von hasnext()/hasmoreelements(), folgt eine NoSuchElementException. Quelle: http://openbook.rheinwerk-verlag.de/javainsel9/bilder/enumerationiteratoruml.gif Collection<String> mynameset = new TreeSet<String>(); Collections.addAll(myNameSet, Albert", Einstein", Alan", Turing" ); for ( Iterator<String> iterator = mynameset.iterator(); iterator.hasnext(); ) System.out.println( iterator.next() ); 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 7

Interfaces, die Collection erweitern Um nun die generische Schnittstelle der endlichen Sammlung (Collection) zu spezifizieren, existieren eine Reihe weitere Schnittstellen für konkretere Datenstrukturen: List Sequenzen Queue Schlangen Set Mengen Map<K,V> Abbildungen Separat zur Collection Quelle: http://openbook.rheinwerk-verlag.de/javainsel9/bilder/collectionapiuml.gif 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 8

Eine Liste Datenstruktur: Sequenz von Daten Elemente haben feste Reihenfolge Generisch einsetzbar: Typspezifizierung Punktueller Zugriff über get(index) Sequentieller Durchlauf über Iterator Beschrieben durch das IFace java.util.list Aber: Verschiedene Ausprägungen für untersch. Zwecke: ArrayList, Vector, LinkedList, Unterschied in: Realisierung, Performance, Speicherplatzbedarf, Thread-Sicherheit Bsp.: Listen (Allgemein) Meine Liste Item 1 Item 2 Item 3..... ArrayList: Realisiert durch Array: Schneller Zugriff auf ein Element über dessen Index LinkedList: Realisiert durch Verkettung der Elemente: Schnelles Einfügen/Löschen von Elementen v.a. in der Mitte 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 9

List erweitert das Interface Collection und definiert die Basis-Methoden für Listen: Einfügen: add(index,element) add(element) addall(collection) Erfragen: contains(object) equals(object) get(index) Löschen: remove(object) remove(index) Interface List removeall(collection) Quelle: http://openbook.rheinwerk-verlag.de/javainsel9/bilder/listuml.gif 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 10

Die Klasse LinkedList Implementierung verketteter Listen durch LinkedList<E> Erweiterte Methoden: addfirst(object) Element am Anfang der Liste hinzufügen addlast(object) Element am Ende der Liste hinzufügen getfirst() Erstes Element zurückliefern getlast() Letztes Element zurückliefern removefirst() Erstes Element Löschen removelast() Letztes Element löschen Nur Methoden von First (einfache Verkettung) + Methoden von Last (Doppelte Verkettung) Einfügen/Löschen an beliebiger Stelle über den ListIterator 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 11

ListIterator Die Schnittstelle ListIterator erweitert das IFace Iterator um spezielle List-Operationen: add(element) Fügt Element vor den Positionszeiger ein next() Liefert Element am Positionszeiger zurück und erhöht den Positionszeiger remove() Entfernt das letzte Element, das von next() zurückgeliefert wurde set(element) Ersetzt das letzte von next() zurückgegebene Element Mittels der Methode listiterator() erhalten wir den entsprechenden ListIterator auf einer Liste, welcher auf das erste Element zeigt: List<String> list = new ArrayList<String>(); Collections.addAll( list, "b", "c", "d" ); ListIterator<String> it = list.listiterator(); it.add( "a" ); System.out.println( list ); it.next(); it.remove(); System.out.println( list ); it.next(); it.set( "C" ); System.out.println( list ); Liste:[b,c,d] Zeiger => b Einfügen vor b: [a,b,c,d] Rückgabe b, Zeiger: c Löschen von b: [a,c,d] Rückgabe c Ändern von c: [a,c,d] 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 12

Anmerkungen: remove() und set() nur zulässig, wenn ein next() zuvor erfolgt ist Sonst: IllegalStateException Für die andere Richtung (rückwärts) gibt es die analogen Methoden: hasprevious() previous() ListIterator Daneben gibt es noch die Methoden nextindex() und previousindex() Geben den Index des Elements wieder, welches bei einem next() bzw. previous() zurückgeliefert werden würde. Am Ende der Liste entspricht dies der Listengröße 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 13

Algorithmen auf Listen Die Klasse java.util.collections bietet zahlreiche (Hilfs-)Algorithmen für Listen: Listenelemente Sortieren, mischen, umdrehen, ersetzen, Extremwerte bestimmen Hilfsklasse: Privater Konstruktor Alle Methoden sind statisch Beispiele: mylist = new LinkedList<>(myCollection); // Sortieren: Collections.sort(myList); // Extremwerte: Collections.max(myList); Collections.min(myList); 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 14

Mengen Eine Menge Ungeordnete Sammlung von Elementen Jedes Element darf nur einmal vorkommen! Beschrieben durch das IFace java.util.set Operationen: Schnitt und Vereinigung von Mengen Beliebte implementierende Klassen: HashSet, TreeSet, LinkedHashSet, Wichtige Methoden: add(element) Einfügen falls Element noch nicht vorhanden Liefert true bei Erfolg clear() löscht die Menge contains(element) Prüft ob Element vorhanden Quelle: http://openbook.rheinwerk-verlag.de/javainsel9/bilder/setuml.gif 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 15

Schlangen (Queues) Eine Schlange I.d.R. zur Implementierung von Warteschlangen nach dem FIFO Prinzip: Interface java.util.queue Implementierende Klasse: LinkedList Wichtige Methoden: Einfügen: add(element) // Mit Exception offer(element) // False Erfragen: element() // Mit NoSuchElementException peek() // null Löschen: remove() // Mit Exception poll() // null Quelle: http://openbook.rheinwerkverlag.de/javainsel9/bilder/queueuml.gif 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 16

Stack (Kellerspeicher) Der Stack Repräsentiert einen Stapel- bzw. Keller-Speicher LIFO (Last-in-First-out) Datenstruktur Klasse: java.util.stack<e> extends Vector<E> Implementiert u.a.: Iterable<E>, Collection<E> und List<E> Wichtige Methoden: Einfügen: push(element) // Element auf den Stack legen Erfragen: empty() // Testet, ob Elemente auf dem Stack liegen peek() // Oberste Element wird gelesen, aber nicht abgeholt! search(element) // gibt die Position eines Elements auf dem // Stack (von der Spitze an) wieder Erfragen und Löschen: pop() // Oberste Element wird gelesen und abgeholt! 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 17

Abbildungen (Assoziative Speicher) Eine Abbildung Verbindet einen Schlüssel K mit einem Wert V Interface: Map<K,V> Implementierende Klassen: HashMap, TreeMap, LinkedHashMap, Wichtige Methoden: Einfügen: put(key,value) putall(map) Erfragen: get(key) containskey(key) containsvalue(value) Löschen: remove(key) clear() Quelle: http://openbook.rheinwerkverlag.de/javainsel9/bilder/mapentryuml.gif 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 18

Beispiel zu Abbildungen HashMap<String,Color> h = new HashMap<String,Color>(); h.put( rot", Color.red); h.put( gruen", Color.green); h.put( blau", Color.blue); h.put( gelb", Color.yellow); for ( String elem : h.keyset() ) System.out.println( elem ); Ausgabe: rot gruen blau gelb 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 19

Aufgabe zu Collections Spielen Sie Black Jack (17 und 4): Erstellen Sie ein neues Package blackjack und schreiben Sie 2 Klassen: Player: Hat einen Namen und verwaltet eine Collection<Cards> mit den Karten, die der Spieler auf der Hand hat. Der Spieler kann eine Karte vom Dealer fordern und diese auf die Hand nehmen Außerdem kann der Spieler den Wunsch zum Karteziehen äußern Nehmen Sie als einfachste Strategie an, dass der Spieler solange eine Karte fordert, bis die Summe seiner Karten > 17 ist. Nehmen Sie als Vereinfachung an, dass bei Black Jack folgende Punkte gelten: Zahlen (2-9), Bube, Dame, König = 10 und Ass = 11 Es gewinnt der Spieler, der am Ende am nächsten zu 21, aber nicht darüber ist. Dealer: Muss zu beginn 52 Karten zur Verfügung stellen und diese mischen. Verwalten Sie den Kartentyp als Enum Cards Zudem muss der Dealer auf Wunsch eines Spielers die oberste Karte dem jeweiligen Spieler abgeben. Legen Sie einen Dealer und 2 Spieler an, die abwechselnd Karten vom Stapel fordern. Will kein Spieler mehr eine Karte ziehen, müssen die Spieler ihre Karten zeigen und den Punktestand bekannt geben. Geben Sie dies (Karten und Punktestand der Spieler) auf der Konsole aus. Verwenden Sie geeignete Collections! 23.06.2016 Javakurs 09: Weitere Datenstrukturen - Lorenz Schauer 20