Teil V. Generics und Kollektionen in Java

Ähnliche Dokumente
11 Grundlegende Datenstrukturen

Abstrakte Datentypen und Java

Einstieg in die Informatik mit Java

JAVA KURS COLLECTION

Collections. Arthur Zaczek. Nov 2015

19 Collections Framework

Objektorientierte Implementierung

Grundkonzepte java.util.list

19 Collections Framework

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

Teil II) Objektorientierte Implementierung 10) Verfeinern von UML-Assoziationen mit dem Java-2 Collection Framework

Mengen und Multimengen

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

Algorithmen und Programmierung

Algorithmen und Programmierung

Algorithmen und Programmierung

Algorithmen und Programmierung

Mengen und Multimengen

Collections. Arthur Zaczek

Programmierkurs Java

ADT: Java Collections und ArrayList

Java Collections Framework (JCF)

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

Kapitel 5: Iterierbare Container

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

Programmieren 2 16 Java Collections und Generizität

Java Einführung Collections

Programmiertechnik II

Propädeutikum Programmierung in der Bioinformatik

OCP Java SE 8. Collections

Vorlesung Programmieren

Programmierkurs Java

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

Software Entwicklung 1

Programmiertechnik II

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

Kapitel 14. Das Java Collection Interface. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

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

Nützliche Utility-Klassen des JDK

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

Kapitel 6: Java Collection Teil I

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

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

Kapitel 7: Java Collection Teil I

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

4.4.9 Das Java Collection Framework

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

Info B VL 14: Java Collections/Reflections

Vorlesung Programmieren

Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik

Programmieren in Java

Objektorientiertes Programmieren mit Java

Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik

Vorlesung Informatik 2

Programmiertechnik II

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

Einführung in die Programmierung mit Java

II.4.6 Collections - 1 -

Java Generics & Collections

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

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

Einführung in die Programmiersprache Java III

ALP II Dynamische Datenmengen

Generische Polymorphie in Java-

Programmieren in Java

Programmieren in Java

Teil 2-3. Vorlesung. Modul: Programmierung B-PRG Grundlagen der Programmierung II

Grundlagen der Informatik Generische Klassen

Vorlesung Informatik 2

Programmieren in Java

Programmierkurs Java

6. Interfaces Grundlagen der Programmierung 1 (Java)

Dynamische Datenstrukturen

public interface Stack<E> { public void push(e e); public E pop();

Programmieren in Java

Teil VII. Hashverfahren

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

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Programmieren 2 Übung Semesterwoche 2

3. Übungsbesprechung Programmkonstruktion

Programmieren in Java

Probleme ohne generische Typen

Informatik II. Vordefinierte Datenstrukturen. - Abbildungen Map. Seite 1 Th Letschert, THM

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

Realisierungsmöglichkeiten für parametrische Polymorphie

Teil 2-3. Vorlesung. Modul: Programmierung B-PRG Grundlagen der Programmierung II

Sammlungen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. Übung SWE 2 1

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

Java I Vorlesung Generics und Packages

Software Entwicklung 1

Hashmap: Video Erklärung

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

Transkript:

Teil V Generics und

Überblick 1 Parametrisierbare Datenstrukturen in Java 2 Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 1

Parametrisierbare Datenstrukturen in Java Motivation für Generics Implementierung einer Datenstruktur erfordert Angabe des Typs der Daten: class Node { class Node { private int obj; private String obj; Node next; Node next;...... ähnlicher Programmtext muss mehrfach geschrieben werden hoher Aufwand, schlechte Wartbarkeit Teilweise Lösung des Problems: Als Typ Object wählen. Nachteil: keine Typprüfung durch Compiler möglich Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 2

Parametrisierbare Datenstrukturen in Java Generics in Java seit Version J2SE 5.0: direkte Unterstützung von parametrisierten Datentypen Generics Notation: Klasse<Elementtyp> Generics werden insbes. für Kollektionen und Iteratoren benutzt: List<RatNumber> list = new ArrayList<RatNumber>(); list.add(new RatNumber(1, 3)); list.add(new RatNumber(1, 4)); Iterator<RatNumber> iter = list.iterator(); while (iter.hasnext()) RatNumber rn = iter.next(); Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 3

Parametrisierbare Datenstrukturen in Java Implementierung von Generics Angabe eines generischen Typen ( Platzhalter ) bei Implementierung private class Node<T> { T obj; Node<T> next; }... public void setnext(node<t> n) { next = n; } Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 4

Parametrisierbare Datenstrukturen in Java Implementierung von Generics /2 private class LinkedList<T> { private Node<T> head = null; public LinkedList() { head = new Node<T>(); }... Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 5

Parametrisierbare Datenstrukturen in Java Implementierung von Generics /3 Typsicherheit bei Verwendung... LinkedList<Student> l = new LinkedList<Student>(); l.add(new Student( Meier )); l.add(new Student( Schulze )); l.add(new Student( Schmidt ));... Student s = l.getfirst();... Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 6

Parametrisierbare Datenstrukturen in Java Implementierung generischer Typen In C++ wird generisches Programmieren über Templates realisiert. der Compiler erzeugt für jeden verwendeten Typ eigenen ausführbaren Code, also Code für Stack<String>, Code für Stack<int>, etc. In Java nutzt der Compiler die Generics zur Typprüfung und ersetzt dann alle Typen durch Object (Rohtyp). Die Nutzung des Java Collection Frameworks ohne Typisierung ist möglich (aber unschön und führt zu Compiler-Warnung). Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 7

Java Collection Framework Teil des Pakets java.util Bereitstellung wichtiger Kollektionen (Listen, Mengen, Verzeichnisse) mit unterschiedlicher Implementierung Navigation mittels Iteratoren Implementierung häufig benutzter Algorithmen (Suchen, Sortieren, kleines/größtes Element,... ) Basis java.util.collection Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 8

Schnittstelle für alle Kollektionsklassen Schnittstelle java.util.collection<e> Größe der Kollektion int size() boolean isempty() Suchen von Elementen boolean contains(e o) boolean containsall(collection<e> c) Navigation Iterator iterator() Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 9

Schnittstelle /2 Hinzufügen/Entfernen boolean add(e o) boolean remove(e o) boolean addall(collection<e> c) boolean removeall(collection<e> c) Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 10

Ausgewählte Kollektionen java.util.list<e> Repräsentation von Listen (geordnet nach Einfügereihenfolge, Duplikate zulässig) java.util.set<e> Repräsentation von Mengen (ungeordnet/geordnet, ohne Duplikate) java.util.map<k,v> Verzeichnis (Dictionary) von Objekten (Schlüssel-Wert-Paare) für schnellen Zugriff über Schlüssel Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 11

java.util.list: Schnittstelle für Listen Zugriff über Position E get(int idx) E set(int idx, E o) void add(int idx, E o) E remove(int idx) Bestimmen der Position eines Objektes int indexof(e o) konkrete Implementierungen verkettete Liste: LinkedList Feld: ArrayList Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 12

Struktur des Java Collection Framework Collection Map List Set SortedMap SortedSet Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 13

Java Collection Framework: Implementierungen Schnittstelle Implementierung Set List Map Hashtabelle HashSet HashMap Feld ArrayList Baum TreeSet TreeMap Liste LinkedList Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 14

Algorithmen für Kollektionen Klasse java.util.collections Sortieren von Listen 1 static void sort(list list) Suchen in Listen 2 public static int binarysearch(list list, T key) 1 Genauer: public static <T extends Comparable<? super T>> void sort(list<t> list) 2 Genauer: public static <T> int binarysearch(list<? extends Comparable<? super T>> list, T key) Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 15

Algorithmen für Kollektionen /2 Umkehren static void reverse(list<?> list) kleinstes/größtes Element 3 static <T> T min(collection<t> col) static <T> T max(collection<t> col) 3 Genauer: public static <T extends Object & Comparable<? super T>> T min(collection<? extends T> coll) Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 16

Anwendungsbeispiel // Liste erzeugen und Objekte einfügen LinkedList<RatNumber> list = new LinkedList<RatNumber>(); list.add(new RatNumber(1, 3)); list.add(new RatNumber(1, 4)); list.add(new RatNumber(1, 5)); // Ausgeben Iterator<RatNumber> i = list.iterator(); while (i.hasnext()) System.out.println(i.next()); // Sortieren Collections.sort(list); // Ausgeben for (RatNumber rn : list) { System.out.println(rn); } Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 17

Zusammenfassung Parametrisierbare Datentypen in Java vordefinierte Klassen in der Java-Bibliothek Literatur: Saake/Sattler: Algorithmen und Datenstrukturen, Kapitel 13 Mössenböck: Verstehen Sie Java? Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 18