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

Ähnliche Dokumente
Vorlesung 09: Mengen. Peter Thiemann SS 2010

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

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester / 32

Java Einführung Collections

Grundlagen der Informatik Generische Klassen

Java Generics & Collections

Vorlesung Programmieren

Datenstrukturen in Java

Schnittstellen implementieren am Beispiel Suchbaum

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Generische Datenstrukturen

Dr. Monika Meiler. Inhalt

Objektorientierte Programmierung

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Praktisches API-Design

3 Objektorientierte Konzepte in Java

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Einführung in die STL anhand eines ausgewählten Beispiels

Generische Typen in Java

12) Generische Datenstrukturen

Java Programmierung Grundlagen

Objektorientierte Programmierung

Objektorientierte Programmierung

Software Engineering Klassendiagramme Assoziationen

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

Überblick. MapReduce Einführung. Ablauf von MapReduce. MapReduce ist Modell zur Strukturierung von Programmen für parallele, verteilte Ausführung

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

Algorithmen und Datenstrukturen

U08 Entwurfsmuster (II)

Kapitel 6. Vererbung

3 Objektorientierte Konzepte in Java

Kapitel 6. Vererbung

Effiziente Java Programmierung

Abschnitt 9: Schnittstellen: Interfaces

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Kapitel 6. Vererbung

Java für Computerlinguisten

1 Polymorphie (Vielgestaltigkeit)

2. Java Schnellkurs Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Übungsaufgabe Transaktion als Middleware

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Software Engineering. 6. Klassendiagramme. Franz-Josef Elmer, Universität Basel, HS 2012

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Repetitorium Informatik (Java)

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung mit C++ Vector und List

Einführung in die Programmierung für Wirtschaftsinformatik

Java: Vererbung. Teil 3: super()

C# im Vergleich zu Java

A(T1) A(T2) A(T1) A(T2)

Java-Schulung Grundlagen

Folge 18 - Vererbung

Assoziation und Aggregation

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Institut fu r Informatik

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Modellarbeit I: Entwurfsgerechte Klassenmodellierung

Typumwandlungen bei Referenztypen

Java Einführung Abstrakte Klassen und Interfaces

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Software Engineering Klassendiagramme Einführung

Programmieren in Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Leseprobe. »Arrays Collections und Maps« Inhaltsverzeichnis. Index. Der Autor. Wissen, wie s geht.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Propädeutikum zur Programmierung

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

5 Projekt Bankverwaltung

5.6 Vererbung. Vererbung

12) Generische Datenstrukturen

Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen

Java Tipps für Lehrer. Table des matières. Einleitung

Techniken der Projektentwicklung

Bean-Mapping mit MapStruct

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Bachelor-Klausur im WiSe 2013 / Grundlagen der Informatik

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java RMI Remote Method Invocation

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Struktur am Beispiel einer Liste

3. Konzepte der objektorientierten Programmierung

Probeklausur: Programmierung WS04/05

Grundlagen der Programmierung Prof. H. Mössenböck. 11. Objektorientierung

Studentische Lösung zum Übungsblatt Nr. 7

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

JUnit 4.11 Die Neuerungen

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Vorlesung Programmieren

Containerklassen. Containerklassen. 1 von 67

Einführung in die. objektorientierte Programmierung

Container-Klassen in Delphi

Synchronisation in Java. Invisible Web

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Transkript:

Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Interfaces Maps and Collections Iterable Collection Map Vorteile: Set List Queue SortedMap Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails. SortedSet Deque NavigableMap Effiziente Standardimplementierungen. Durch Einhalten vorgegebener APIs können unabhängige Containerklassen zusammenarbeiten. NavigableSet Felix Brandt, Harald Räcke 448 Felix Brandt, Harald Räcke 449 Überblick Collection Interface Collection. Allgemeine Containerschnittstelle; das Framework bietet keine konkrete Implementierung; Set. Ein Container, der keine Duplikate enthält. List. Ein geordneter Container; man kann Elemente an vorgegebenen Positionen einfügen; Duplikate sind erlaubt. Queue. Ein Container, der zusätzliche Einfüge, und Abfragemöglichkeiten bietet; realisiert (spezielle) Ordnung der Elemente (z.b. FIFO, LIFO, PriorityQueue) Map Assoziativer Speicher. Bildet Schlüssel auf Werte ab. Schlüssel können nicht doppelt vorkommen. add addall contains Collection<E> (E e) : boolean «optional» (Collection<? extends E> c) : boolean «optional» (Object o) : boolean containsall (Collection<?> c) : boolean isempty size remove clear removeall retainall toarray toarray () : boolean () : int (Object o) : boolean «optional» () «optional» (Collection<?> c) : boolean «optional» (Collection<?> c) : boolean «optional» () : Object[] (T[] a) : T[] Iterable<E> iterator () : Iterator<E> Felix Brandt, Harald Räcke 450 Felix Brandt, Harald Räcke 451

List Interface add(), addall() aus Collection fügen am Ende ein; remove(object o) entfernt die erste Objektinstanz (falls Duplikate vorhanden). List Implementierungen Collection<E> List<E> add addall get set remove indexof List<E> (int index, E e) : boolean «optional» (int index, Collection<? extends E> c) : boolean «optional» (int index) : E (int index, E e) : E «optional» (int index) : E «optional» (Object o) : int lastindexof (Object o) : int sublist listiterator listiterator (int fromindex, int toindex) : List<E> () : ListIterator<E> (int index) : ListIterator<E> LinkedList<E> ArrayList<E> add remove get contains ArrayList O(1) O(n) O(1) O(n) LinkedList O(1) O(1) O(n) O(n) sublist gibt ein View auf eine Teilliste zurück. Änderungen an dieser Teilliste wirken sich auf die Originalliste aus. Falls man nach Erzeugen des Views die Originalliste ändert, wird der View ungültig. Felix Brandt, Harald Räcke 453 Set Interface(s) Das Set-interface enthält nur Methoden aus dem Collection-Interface. Diese haben aber teilweise eine andere Bedeutung, da Duplikate nicht erlaubt sind. Set Implementierungen Set<E> Zusätzliche Methoden von SortedSet: HashSet<E> SortedSet<E> first last headset tailset subset () : E () : E SortedSet<E> (E toelement) : SortedSet<E> (E fromelement) : SortedSet<E> (E fromelement, E toelement) : SortedSet<E> comparator () : Comparator<? super E> headset, tailset, subset geben Views zurück. Diese bleiben nach Änderung der Originalmenge gültig. Der SortedSet-Iterator durchläuft die Menge gemäß ihrer Sortierung. LinkedHashSet<E> NavigableSet<E> TreeSet<E> TreeSet<E>(Comparator<E> c) erzeugt eine sortierte Menge, in dem Elemente gemäß c sortiert sind. Felix Brandt, Harald Räcke 454 Felix Brandt, Harald Räcke 455

Set Laufzeiten Map Interface Map<K,V> add contains next HashSet O(1) O(1) O(h/n) LinkedHashSet O(1) O(1) O(1) TreeSet O(log n) O(log n) O(log n) h ist die Anzahl der Buckets in der HashSet-Implementierung. Die Laufzeiten für die hashbasierten Verfahren setzen eine gute hashcode()-funktion voraus. put (K key, V value) : V «optional» putall (Map<? extends K,? extends V> m) «optional» remove (Object o) : V «optional» clear () «optional» containskey (Object o) : boolean containsvalue (Object o) : boolean isempty () : boolean size () : int get (K key) : V entryset () : Set<Map.Entry<K,V>> keyset () : Set<K> values () : Collection<V> Schlüssel werden auf Werte abgebildet; kein Schlüssel kommt doppelt vor; Werte eventuell schon in einer SortedMap sind die Schlüssel sortiert Felix Brandt, Harald Räcke 456 Felix Brandt, Harald Räcke 457 Map Implementierungen Map Laufzeiten Map<K,V> get containskey next HashMap<K,V> SortedMap<K,V> WeakHashMap<K,V> HashMap O(1) O(1) O(h/n) WeakHashMap O(1) O(1) O(h/n) LinkedHashMap O(1) O(1) O(1) TreeMap O(log n) O(log n) O(log n) NavigableMap<K,V> h ist die Anzahl der Buckets in der HashSet-Implementierung. TreeMap<K,V> Die Laufzeiten für die hashbasierten Verfahren setzen eine gute hashcode()-funktion voraus. Felix Brandt, Harald Räcke 458 Felix Brandt, Harald Räcke 459

Collections Tricks Löschen, der Elemente [100,..., 200) in einer Liste: l i s t. sublist (100,200). clear ( ) ; Entfernen von Duplikaten aus einer Collection: Collection <Type> c =... ; Collection <Type> nodups = new HashSet<Type>( c ) ; Löschen aller Strings, die mit f anfangen: SortedSet <String > dictionary =... ; dictionary. subset ( " f ", "g" ). clear ( ) ; Das Beispiel für die SortedSet, nimmt an, dass beim Erzeugen der SortedList kein spezieller Comparator<String> übergeben wird, der die Sortierreihenfolge ändert. Arrays aslist Die Funktion aslist(t[] a) gibt ein Listenview auf ein Array zurück. Damit können Funktionen, die eine Collection erwarten auch mit einem Array aufgerufen werden: 1 Integer[] arr = {3,7,12,-5}; 2 Collections.sort(Arrays.asList(arr)); 3 for (int i=0; i<arr.length; i++) { 4 System.out.println(arr[i]); 5 } die resultierende Liste ist in der Größe fixiert; remove(), add() werfen Exceptions; mit set() kann man die Liste aber verändern. Felix Brandt, Harald Räcke 460 Felix Brandt, Harald Räcke 461 Eigene Kollektionen Eigene Kollektionen Übersicht Zum Erstellen eigener Kollektionen erbt man von abstrakten Klassen, die einen Großteil der Implementierung bereitstellen (z.b. removeall() über wiederholten Aufruf von remove() etc.) Dann werden nur einige Funktionen implementiert. Für zusätzliche Effizienz können auch weitere Funktionen überschrieben werden. AbstractCollection benötigt iterator und size. AbstractSet benötigt iterator und size. AbstractList benötigt get und size und (optional) set, remove, add. AbstractSequentialList benötigt listiterator und size. AbstractMap benötigt entryset (View); (optional) put falls veränderbar Felix Brandt, Harald Räcke 462 Felix Brandt, Harald Räcke 463

Beispiel aslist Idee: Speichere Arrayreferenz in Attribut lokaler Klasse. Übersetze Listenbefehle in entsprechende Arraybefehle. typisch für Adapterklassen 1 public static <T> List<T> aslist(t[] a) { 2 return new MyArrayList<T>(a); 3 } 4 private static class MyArrayList<T> extends 5 AbstractList<T> { 6 private final T[] a; 7 MyArrayList(T[] array) { 8 a = array; 9 } Beispiel aslist 10 public T get(int index) { 11 return a[index]; 12 } 13 public T set(int index, T element) { 14 T oldvalue = a[index]; 15 a[index] = element; 16 return oldvalue; 17 } 18 public int size() { 19 return a.length; 20 } 21 } Felix Brandt, Harald Räcke 464 Felix Brandt, Harald Räcke 465