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

Ähnliche Dokumente
Sammlungen. Inhalt. Einleitung. Listen und Queues. Mengen. Abbildungen. Algorithmen und Wrapper. Zusammenfassung

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

Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper

19 Collections Framework

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

19 Collections Framework

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

Java Collections Framework (JCF)

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

Nützliche Utility-Klassen des JDK

OCP Java SE 8. Collections

JAVA KURS COLLECTION

Grundkonzepte java.util.list

Propädeutikum Programmierung in der Bioinformatik

Kapitel 6: Java Collection Teil I

Teil V. Generics und Kollektionen in Java

Kapitel 7: Java Collection Teil I

Objektorientiertes Programmieren mit Java

Programmieren in Java

Programmiertechnik II

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

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Programmiertechnik II

Vorlesung Programmieren

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

Programmieren in Java

Vorlesung 07: Collections. Peter Thiemann SS 2010

Einstieg in die Informatik mit Java

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

Programmiertechnik II

Programmieren in Java

Programmieren in Java

Programmierkurs Java

Grundlagen der Informatik Generische Klassen

Programmieren in Java

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

Javakurs für Fortgeschrittene

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

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

Collections. Arthur Zaczek. Nov 2015

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

Programmieren 2 16 Java Collections und Generizität

Generische Polymorphie in Java-

Info B VL 14: Java Collections/Reflections

Collections. Datamining und Sequenzanalyse. Marvin Meusel, Bertram Vogel

Software Entwicklung 1

2.4. Java Collections Framework

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

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

Software Entwicklung 1

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Weiterführende Themen

Programmierkurs Java

Java Einführung Collections

Collections. Arthur Zaczek

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

3. Übungsbesprechung Programmkonstruktion

4.4.9 Das Java Collection Framework

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

Kapitel 5: Iterierbare Container

Java Generics & Collections

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

Enterprise Java, Services und Systemintegration. Wie gut kennst Du das Collections Framework? Historie

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

Vorlesung Programmieren

Abstrakte Datentypen und Java

Objektorientierte Implementierung

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

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

Algorithmen und Datenstrukturen in Java Jiri Spale, Algorithmen und Datenstrukturen in Java 1

Einführung in die Programmierung mit Java

ADT: Java Collections und ArrayList

Software Entwicklung 1

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

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

Mengen und Multimengen

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

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

Die Java - Collections API

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

Datenstrukturen. Ziele

Einführung in die Programmiersprache Java III

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

Literaturverzeichnis. Literaturverzeichnis 245

ALP II Dynamische Datenmengen Datenabstraktion

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

Selbststudium OOP7 & ALG2 Auftrag

Mengen und Multimengen

Java I Vorlesung Collections

Datenstrukturen in Java

Transkript:

Sammlungen Übung SWE 2 1

Inhalt Einleitung Listen und Queues Mengen Abbildungen Algorithmen und Wrapper Zusammenfassung Übung SWE 2 2

Einleitung Collections sind Datenstrukturen für Sammlungen von Daten Stacks Queues Mengen Trees Maps Collection-Frameworks bieten Schnittstellen und Klassen für den Umgang mit Sammlungen Collection-Frameworks sind ein zentraler Bestandteil jeder Klassenbibliothek, z.b. Standard Template Library von C++ Smalltalk's collection classes System.Collections Namespace von.net Übung SWE 2 3

Klassenhierarchie: Interfaces und konrete Klassen package java.util Seit Java 1.5 Iterable<E> Iterator<E> Collection<E> Map<K,V> List<E> Queue<E> Set<E> SortedMap <K,V> ConcurrentMap <K,V> HashMap <K,V> ArrayList<E> LinkedList<E> SortedSet<E> HashSet<E> TreeMap<K,V> ConcurrentHashMap <K,V> TreeSet<E> Übung SWE 2 4

Implementierungen von Collection-Interfaces: Überblick Implementations Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List Set HashSet TreeSet LinkedHashSet Interfaces List ArrayList LinkedList Map HashMap TreeMap LinkedHashMap Übung SWE 2 5

Implementierungen von Collection-Interfaces AbstractCollection<E> abstrakte Klassen AbstractList<E> AbstractQueue<E> AbstractSet<E> AbstractMap<K,V> Abstract SequentialList<E> LinkedList<E> ArrayList<E> HashSet<E> TreeSet<E> HashMap<K,V> TreeMap<K,V> PriorityQueue<E> IdentityHashMap<K,V> konkrete Klassen LinkedHashSet<E> LinkedHashMap<K,V> Übung SWE 2 6

Iterable und Iterator Für alles was aufzählbar ist erlaubt die Verwendung der foreach-anweisung Zugriff auf Iterator package java.lang; public interface Iterable<E> { Iterator<E> iterator(); package java.util; public interface Iterator<E> { boolean hasnext(); E next(); void remove(); Übung SWE 2 7

Iteration über Elemente (nicht-generische Version) Interface Iterator dient zum Iterieren über die Elemente ersetzt Enumeration aus alter API Elemente können entfernt werden Methodennamen wurden verkürzt public interface Iterator { boolean hasnext(); Object next(); void remove(); Beispiel: static void removenumbers(collection coll) { Iterator iter = coll.iterator(); while (iter.hasnext()) { Object elem = iter.next(); if (elem instanceof Number) { iter.remove(); Übung SWE 2 8

Iteration über Elemente (generische Variante) Interface Iterator<T> dient zum Iterieren über die Elemente public interface Iterator<E> { boolean hasnext(); E next(); void remove(); Beispiel: static void iterateoverpersons(collection<person> coll) { Iterator<Person> iter = coll.iterator(); while (iter.hasnext()) { Person p = iter.next(); // do something with p Übung SWE 2 9

Iteration über Elemente (Verwendung von foreach-anweisung) Collection mit Iterator und Verwendung der foreach-schleife public interface Iterator<E> { boolean hasnext(); E next(); void remove(); Beispiel: static void removenumbers(collection<person> coll) { for (Person p: coll) { // do something with p Übung SWE 2 10

Interface Collection Collection ist elementares Interface für Sammlungen Basic Operations (müssen implementiert werden): enthalten sein ist leer und Anzahl der Elemente Iterator Optionale Operationen (können implementiert sein): Anfügen von Elementen Löschen Beibehalten von Elementen) package java.util; public interface Collection<E> { // basic operations boolean contains(object o); boolean containsall(collection<?> c); boolean isempty(); Iterator<E> iterator(); int size(); // optional operations boolean add(e o); boolean addall(collection<? extends E> c); void clear(); boolean remove(object o); boolean removeall(collection<?> c); boolean retainall(collection<?> c); Umwandlung in Arrays // conversion Object[] toarray(); <T> T[] toarray(t[] a); Übung SWE 2 11

Verwendung von toarray toarray liefert Elemente in Array Frage des Typs des Arrays Object-Array: Object[] toarray(); Array bestimmten Typs: <T> T[] toarray(t[] a); Typ des Arrays wird mit Parameter angegeben! Ist übergebenes Array groß genug, um alle Elemente zu speichern, werden diese ind dieses eingefügt, sonst ein neues angelegt. Beispiel Nicht-generische Variante List l = new ArrayList(points); Object[] lobjects = l.toarray(); Point[] lpoints = (Point[]) l.toarray(new Point[0]); Generische Variante List<Point> l = new ArrayList<Point>(points); Point[] intarr = l.toarray(new Point[0]); Übung SWE 2 12

Inhalt Einleitung Listen und Queues Mengen Abbildungen Algorithmen und Wrapper Zusammenfassung Übung SWE 2 13

Interface List List ist ein spezielles Interface, das von einer Reihenfolge der Elemente ausgeht Damit hat jedes Element eine Position Es sind folgende zusätzliche Operationen definiert: Einfügen an einer bestimmten Position Zugriff auf ein Element an einer bestimmten Position Löschen eines Element an einer bestimmten Position Position eines Elements Spezieller ListIterator public interface List<E> extends Collection<E> { // positional access void add(int index, E element); E get(int index); E remove(int index); E set(int index, E element); // search int indexof(object o); int lastindexof(object o); // iteration ListIterator<E> listiterator(); ListIterator<E> listiterator(int index); Elemente in einem bestimmten Bereich // sublist List<E> sublist(int fromindex, int toindex); Übung SWE 2 14

Interface ListIterator Interface ListIterator erlaubt erweiterte Iteration über Elemente Damit sind folgende zusätzliche Methoden definiert: Iteration nach hinten und nach vorne Einfügen an der aktuellen Position Setzen des aktuell gelesenen Elements Abfrage der Position des nächsten und vorherigen Elements public interface ListIterator<E> extends Iterator<E> { boolean hasnext(); boolean hasprevious(); E next(); int nextindex(); E previous(); int previousindex(); void add(e o); void remove(); void set(e o); Übung SWE 2 15

Implementierungen von List Es gibt zwei alternative Implementierungen von List: LinkedList: doppelt verkette Liste gut bei Einfügen in der Mitte schlecht bei direktem Zugriff auf ein Element ArrayList: auf der Basis von Arrays gut bei direktem Zugriff schlecht beim Einfügen von Elementen Übung SWE 2 16

Queues Neu in Java 1.5 Typischerweise FIFO, First In First out Interface für Queues API - Abfragen, nicht entfernen - Einfügen eines Elements - Abfragen, nicht entfernen evtl. null - Abfragen, entfernen evtl. null - Abfragen, entfernen Implementierungen public interface Queue<E> extends Collection<E> { E element(); boolean offer(e o); E peek(); E poll(); E remove(); - LinkedList - PriorityQueue: mit Sortierung Insert Remove Examine Throws exception add(e) remove() element() Returns special value offer(e) poll() peek() Übung SWE 2 17

Inhalt Einleitung Listen und Queues Mengen Abbildungen Algorithmen und Wrapper Zusammenfassung Übung SWE 2 18

Interface Set Entspricht dem mathematischen Konzept der Menge Elemente können maximal einmal enthalten sein, Vergleich der Elemente erfolgt mit equals null prinzipiell als Element zulässig Keine Aussage über Reihenfolge der Elemente public interface Set<E> extends Collection<E>, Iterable<E> { // Identische Methoden wie Collection (!) Übung SWE 2 19

Interface SortedSet Wie Set aber Sortierung der Elemente Sortierkriterium kann sein: Comparable: Elemente müssen Comparable-Interface implementieren und Vergleich der Elemente erfolgt mittels compareto-methoden Comparator: dem SortedSet wird ein eigenes Comparator-Objekt übergeben, mit dem die Elemente verglichen werden public interface SortedSet<E> extends Set<E> { Comparator<? super E> comparator(); E first(); SortedSet<E> headset(e toelement); E last(); SortedSet<E> subset(e fromelement, E toelement); SortedSet<E> tailset(e fromelement); public interface Comparator<T> { int compare(t o1, t o2); public interface Comparable<T> { int compareto(t o); Übung SWE 2 20

Implementierungen von Set Implementierungen von Set: HashSet: - Auf der Basis von Hashtabellen - schneller Zugriff und schnelles Einfügen EnumSet: - Alle Elemente müssen Werte einer Enumeration sein Implementierungen von SortedSet: TreeSet: - Auf der Basis von Red-Black-Trees - binäre Sortierung Übung SWE 2 21

Beispiel SortedSet und Comparable public class Person implements Comparable<Person> { String firstname; String lastname; String city; long ssn; public int compareto(person o) { int comparison = getlastname().comparetoignorecase(o.getlastname()); if (comparison == 0) { comparison = getfirstname().comparetoignorecase(o.getfirstname()); if (comparison == 0) { comparison = getcity().comparetoignorecase(o.getcity()); return comparison;... SortedSet für Person-Objekte deklarieren und TreeSet erzeugen SortedSet<Person> s = new TreeSet<Person>(); Person-Objekte anfügen, diese werden nach dem Sortierkriterium sortiert s.add(new Person("Hans", "Berger", 123412121956L, "Linz")); s.add(new Person("Franz", "Mayr", 999931121993L, "Graz")); s.add(new Person("Otto", "Berger", 111101012000L, "Wien")); Übung SWE 2 22

Beispiel SortedSet und Comparator Comparator für Person-Objekte definieren class PersonSsnComparator implements Comparator<Person> { public int compare(person p1, Person p2) { long ssn1 = p1.getssn(); long ssn2 = p2.getssn(); // compare years int compare = (int)(ssn1 % 10000 - ssn2 % 10000); if (compare!= 0) { return compare;... SortedSet für Person-Objekte deklarieren und TreeSet erzeugen SortedSet<Person> s = new TreeSet<Person>(new PersonSsnComparator()); Person-Objekte anfügen, diese werden nach Nachname sortiert s.add(new Person("Hans", "Berger", 123412121956L, "Linz")); s.add(new Person("Franz", "Mayr", 999931121993L, "Graz")); s.add(new Person("Otto", "Berger", 111101012000L, "Wien")); Übung SWE 2 23

Inhalt Einleitung Listen und Queues Mengen Abbildungen Algorithmen und Wrapper Zusammenfassung Übung SWE 2 24

Interface Map Abbildung von Schlüsseln auf Werte Jeder Schlüssel maximal einmal enthalten Vorsicht bei veränderlichen Schlüsselwerten Jeder Eintrag ist ein Objekt vom Typ Map.Entry public interface Map<K,V> { // basic operations boolean containskey(object key); boolean containsvalue(object value); V get(object key); boolean isempty(); int size(); // optional operations void clear(); V put(k key, V value); void putall(map<? extends K,? extends V> t); V remove(object key); // collection view Set<Map.Entry<K,V>> entryset(); Set<K> keyset(); Collection<V> values(); public static interface Map.Entry<K,V> { K getkey(); V getvalue(); V setvalue(v value); Übung SWE 2 25

Interface SortedMap Wie Map aber mit Sortierung der Schlüssel public interface SortedMap<K,V> extends Map<K,V> { Comparator<? super K> comparator(); K firstkey(); K lastkey(); SortedMap<K,V> submap(object fromkey, Object tokey); Übung SWE 2 26

Implementierungen von Map Implementierungen von Map: HashMap: - Auf der Basis von Hashtabellen - schneller Zugriff und Einfügen LinkedHashMap: - zusätzlich definierte Reihenfolge auf Basis von Linked-Lists WeakHashMap: - schwache Referenzen der Werte IdentityHashMap: - Vergleich der Keys auf Referenzgleichheit EnumMap - Alle Schlüssel müssen aus einer Enumeration stammen. Implementierungen von SortedMap: TreeMap: - Auf der Basis von Red-Black-Trees - binäre Sortierung Übung SWE 2 27

Beispiel SortedMap SortedMap für Person-Objekte deklarieren und TreeMap erzeugen Key vom Typ Long (SSN) Value vom Typ Person SortedMap<Long, Person> map = new TreeMap<Long, Person>(); Person-Objekte anfügen, diese werden nach dem Key sortiert map.put(123412121956l, new Person("Hans", "Berger", 123412121956L, "Linz")); map.put(999931121993l, new Person("Franz", "Mayr", 999931121993L, "Graz")); map.put(111101012000l, new Person("Otto", "Berger", 111101012000L, "Wien")); Direkter Zugriff map.get(123412121956l); map.get(999931121993l); Iteration for (Long ssn: persons.keyset()) { System.out.println(ssn + " : " + persons.get(ssn).tostring()); for (Person p: persons.values()) { System.out.println(p.toString()); Übung SWE 2 28

Beispiel SortedMap und Comparator Comparator für Person-Objekte definieren class SsnComparator implements Comparator<Long> { public int compare(long ssn1, Long p2) { // compare years int compare = (int)(ssn1 % 10000 - ssn2 % 10000); if (compare!= 0) { return compare;... SortedMap für Person-Objekte deklarieren und TreeSet erzeugen SortedMap<Long, Person> persons = new TreeMap<Long, Person>(new SsnComparator()); Übung SWE 2 29

Anmerkungen zu SortedSet, SortedMap, HashMap Sortierkriterium: compareto von Comparable und compare von Comparator sollen kompatibel mit equals sein obj1.compareto(obj2) == 0 => obj1.equals(obj2) compare(obj1, obj2) == 0 => obj1.equals(obj2) Änderungen bei Objekten: Objekte in SortedSets und SortedMaps dürfen nicht mehr so verändert werden, dass sich die Sortierreihenfolge ändert Felder, die die Sortierreihenfolge getreffen, sollten immutable sein (d.h. private Felder und nur Getter-Methode) Hashcode für HashMaps: HashMaps funktionieren nur, wenn gleiche Objekte (equals) den gleichen Hashcode liefern obj1.equals(obj2) => obj1.hashcode() == obj2.hashcode() Wird equals überschrieben, sollte auch hashcode überschrieben werden Übung SWE 2 30

Inhalt Einleitung Listen und Queues Mengen Abbildungen Algorithmen und Wrapper Zusammenfassung Übung SWE 2 31

Hilfsklasse Collections Klasse Collections bietet eine Vielzahl von static-methoden für: Algorithmen Erzeugen von Wrapper für die Collection-Implementierungen Algorithmen in Collections: public class Collections { static <T>int binarysearch(list<? extends Comparable<? super T>> list, T key); static <T>int binarysearch(list <? extends T> list, T key, Comparator<? super T> c); static <T>void copy(list<? super T> dest, List src<? extends T>); static <T>void fill(list<? super T> list, T o); static <T extends Object & Comparable<? super T>> T max(collection<? extends T> coll); static <T>T max(collection<? extends T> coll, Comparator<? super T> comp); static <T extends Object & Comparable<? super T>> T min(collection <? extends T> coll); static <T>T min(collection<? extends T> coll, Comparator<? super T> comp); static <T>List<T> ncopies(int n, T o); static void reverse(list<?> l); static void shuffle(list<?> list); static void shuffle(list<?> list, Random rnd); static <T>Set<T> singleton(t o); static <T>List<T> singletonlist(t o); static <K,V>Map<K,V> singletonmap(k key, V value); static <T extends Comparable<? super T>> void sort(list<t> list); static <T>void sort(list<t> list, Comparator<? Super T> c);... Übung SWE 2 32

Beispiel Algorithmen: Mischen von Karten Folgende Methode mischt Karten static List shufflecards() { String[] suit = new String[] {"spades", "hearts", "diamonds", "clubs"; String[] rank = new String[] {"ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king"; List deck = new ArrayList(); for (int i = 0; i < suit.length; i++) { for (int j = 0; j < rank.length; j++) { deck.add(rank[j] + " of " + suit[i]); Collections.shuffle(deck); return deck; Übung SWE 2 33

Wrapper Collection-Frameworks erlaubt über Wrapper besimmte Sichten von Collection- Objekten zu erzeugen Diese Sichten realisieren das entsprechende Interface mit bestimmten Zusätzen Zwei wichtige Wrapper sind Wrapper mit: synchronized-methoden: exklusiver Zugriff auf Collection pro Thread unmodifiable-methoden: unveränderliche Sicht auf Collection Klasse Collections bietet Methode solche Wrapper zu erzeugen: static <T>Collection<T> synchronizedcollection(collection<t> c); static <T>Set<T> synchronizedset(set<t> s); static <T>List<T> synchronizedlist(list<t> list); static <K,V>Map<K,V> synchronizedmap(map<k,v> m); static <T>SortedSet<T> synchronizedsortedset(sortedset<t> s); static <K,V>SortedMap<K,V> synchronizedsortedmap(sortedmap<k,v> m); static <T>Collection<T> unmodifiablecollection(collection<? extends T> c); static <T>Set<T> unmodifiableset(set<? extends T> s); static <T>List<T> unmodifiablelist(list<? extends T> list); static <K,V>Map<K,V> unmodifiablemap(map<? extends K,? extends V> m); static <T>SortedSet<T> unmodifiablesortedset(sortedset<t> s); static <K,V>SortedMap<K,V> unmodifiablesortedmap(sortedmap<k,? extends V> m); Übung SWE 2 34

Inhalt Einleitung Listen und Queues Mengen Abbildungen Algorithmen und Wrapper Zusammenfassung Übung SWE 2 35

Zusammenfassung Listen Elemente in fester Reihenfolge Zugriff auf Elemente über Index möglich Suchfunktionen Mengen Elemente maximal einmal enthalten Eventuell sortiert Abbildungen Abbildung von Schlüsselobjekten auf Wertobjekte Iteration über Elemente Mittels Iterator und ListIterator Hilfsklasse Collections Suchen, Füllen, Mischen und Sortieren Erzeugen synchronisierter oder unveränderbarer Sammlungen Übung SWE 2 36