19 Collections Framework

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

19 Collections Framework

OCP Java SE 8. Collections

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

JAVA KURS COLLECTION

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

Einstieg in die Informatik mit Java

Nützliche Utility-Klassen des JDK

Kapitel 6: Java Collection Teil I

Mengen und Multimengen

Collections. Datamining und Sequenzanalyse. Marvin Meusel, Bertram Vogel

Programmieren in Java

Kapitel 7: Java Collection Teil I

Mengen und Multimengen

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Vorlesung 07: Collections. Peter Thiemann SS 2010

Teil V. Generics und Kollektionen in Java

Generische Polymorphie in Java-

Literaturverzeichnis. Literaturverzeichnis 245

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

Programmiertechnik II

Info B VL 14: Java Collections/Reflections

Vorlesung 09: Mengen. Peter Thiemann SS 2010

Abstrakte Datentypen und Java

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

Objektorientierte Implementierung

Grundkonzepte java.util.list

Java Generics & Collections

Collections. Arthur Zaczek. Nov 2015

Java Einführung Collections

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

Programmieren in Java

Programmiertechnik II

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

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

Selbststudium OOP7 & ALG2 Auftrag

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

Sammlungen. Listen Mengen Abbildungen Algorithmen Wrapper. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Programmieren in Java

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

Collections des Typs Set. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 09: Collections 3. Collections des Typs Set.

Vorlesung Programmieren

Objektorientiertes Programmieren mit Java

Die Java - Collections API

Java Generics & Collections

Mocking Libraries Shootout

Grundlagen der Informatik Generische Klassen

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

Programmieren in Java

ADT: Java Collections und ArrayList

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

Programmieren in Java

Programmierkurs Java

Software Entwicklung 1

Dynamische Datenstrukturen

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

Einführung in die Programmierung mit Java

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

Programmierkurs Java

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

4.4.9 Das Java Collection Framework

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

Programmieren I. Listen mit wahlfreiem Zugriff. Vorlesung 1. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011.

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

Vorlesung Programmieren

Hashmap: Video Erklärung

Institut für Informatik

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

Java Collection Framework

Programmieren 2 16 Java Collections und Generizität

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

Programmieren 2 02 Maps, Sets, Defensive Programmierung

Weiterführende Themen

II.4.4 Exceptions - 1 -

Javakurs für Fortgeschrittene

Datenstrukturen. Ziele

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

Tutoraufgabe 1 (Collections):

Algorithmen und Datenstrukturen CS1017

6. Interfaces Grundlagen der Programmierung 1 (Java)

Objektsammlungen. Programmieren 2. Konzepte (Wiederholung vom Dienstag)

Inner Class. 1 public class OuterClass { 2 private int var; 3 public class InnerClass { 4 void methoda() {}; 5 } 6 public void methodb() {}; 7 }

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

3. Übungsbesprechung Programmkonstruktion

Vom objektorientierten Entwurf zur Implementierung in Java. 2. Dezember 2014

Java I Vorlesung Collections

ALP II Dynamische Datenmengen Datenabstraktion

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Grundlagen der Informatik 0

Transkript:

Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Vorteile: Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails. Effiziente Standardimplementierungen. Durch Einhalten vorgegebener APIs können unabhängige Containerklassen zusammenarbeiten. Harald Räcke 633

Interfaces Maps and Collections Iterable Collection Map Set List Queue SortedMap SortedSet Deque NavigableMap NavigableSet Harald Räcke 634

Überblick 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. Harald Räcke 635

Collection Interface Iterable<E> iterator () : Iterator<E> 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[] Harald Räcke 636

List Interface add(), addall() aus Collection fügen am Ende ein; remove(object o) entfernt die erste Objektinstanz (falls Duplikate vorhanden). Collection<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> 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.

List Implementierungen List<E> LinkedList<E> ArrayList<E> Laufzeiten: add remove get contains ArrayList O(1) O(n) O(1) O(n) LinkedList O(1) O(1) O(n) O(n) Harald Räcke 638

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. Zusätzliche Methoden von SortedSet: 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. Harald Räcke 639

Set Implementierungen Set<E> HashSet<E> SortedSet<E> LinkedHashSet<E> NavigableSet<E> TreeSet<E> TreeSet<E>(Comparator<E> c) erzeugt eine sortierte Menge, in dem Elemente gemäß c sortiert sind. Harald Räcke 640

Set Laufzeiten Laufzeiten: 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. Harald Räcke 641

Map Interface put putall remove clear containskey Map<K,V> (K key, V value) : V «optional» (Map<? extends K,? extends V> m) «optional» (Object o) : V «optional» () «optional» (Object o) : boolean containsvalue (Object o) : boolean isempty size get entryset keyset values () : boolean () : int (K key) : V () : Set<Map.Entry<K,V>> () : Set<K> () : 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 Harald Räcke 642

Map Implementierungen Map<K,V> HashMap<K,V> SortedMap<K,V> WeakHashMap<K,V> NavigableMap<K,V> TreeMap<K,V> Harald Räcke 643

Map Laufzeiten Laufzeiten: get containskey next 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) h ist die Anzahl der Buckets in der HashSet-Implementierung. Die Laufzeiten für die hashbasierten Verfahren setzen eine gute hashcode()-funktion voraus. Harald Räcke 644

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. Harald Räcke 645

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. Harald Räcke 646

Eigene Kollektionen 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. Harald Räcke 647

Eigene Kollektionen Übersicht 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 Harald Räcke 648

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 } Harald Räcke 649

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 } Harald Räcke 650