Containerklassen. Containerklassen. 1 von 67

Größe: px
Ab Seite anzeigen:

Download "Containerklassen. Containerklassen. 1 von 67"

Transkript

1 1 von 67

2 Abstraktionsstufen im Überblick 2 von 67

3 Low-Level-Container In Java Arrays verkettete Listen auf Basis von Next-Referenzen Bäume auf Basis von Knoten mit Kind-Referenzen Charakteristiken Implementierungsdetails liegen offen Verwendung aufwändig und oft nicht problemadäquat 3 von 67

4 Kapselung des Speichermodells in Klassen Lösungen im JDK 1.0 Allgemeine (wiederverwendbare) Container mit Inhaltstyp Object Die Klassen: Vector Hashtable Defizite der beiden Klassen Implementierung ist festgelegt Keine saubere Zuordnung zu ADTs (abstrakten Datentypen) Typsicherheit? 4 von 67

5 Realisierung des ADT-Konzepts Zur Erinnerung: Trennung zwischen Modell und Implementierung, Festlegung des Funktionsumfangs über abstrakte Operationen Im JDK 1.2 Einführung des Collection-Frameworks. Abstrakter Teil von ADTs wird über möglichst präzise Interfaces abgedeckt. Die Verwendung sieht nur das Interface, nicht die Implementierung. Implementierungen sind austauschbar. Allgemeinheit Über Elementtyp Object realisiert. Verbleibender Kritikpunkt: unzureichende Typsicherheit. 5 von 67

6 Collections mit Generics Prinzip Typparametrisierung von Klassen und Methoden (s. o.) Besonders geeignet für und darauf operierende Algorithmen. Einführung: Mit Java 5 Bestehendes Collection-Framework konnte rückwärtskompatibel umgestellt werden. 6 von 67

7 Collections im Concurrent-API Absicht Berücksichtigung von zunehmenden Nebenläufigkeitsanforderungen (Stichwort Multicores) Effiziente thread-sichere Klassen (insbesondere nonblocking). Einführung: Mit Java 6 (+ Erweiterungen in Java 7 und Java 8). Meist Implementierungen, aber auch einige neue Interfaces. 7 von 67

8 Aggregatfunktionen mit Lambdas Prinzip Interne Iterierung mit Vorgabe einer Operation pro Element. Operation wird als Lambda spezifiziert Somit funktionale Sicht auf Collections. Einführung: Mit Java 8 Integration nur möglich wg. Implementierung von Interface-Evolution durch Default-Implementierungen in Interfaces. 8 von 67

9 Die Klassen Vector und Hashtable 9 von 67

10 Der Einfluss der Historie Die Klassen Vector und Hashtable sind die "Vorläufer" des Frameworks für Container-Klassen, das erst mit dem jdk1.2 eingeführt wurde. Sie sind deshalb (mit dem Interface Enumeration) als "Hilfsstrukturen" in vielen APIs enthalten. Vgl. auch Java Mobile Sie wurden aber in das Collection-Framework mit integriert. 10 von 67

11 Intention der Klasse Vector Die Klasse java.util.vector wurde konzipiert als relativ allgemeiner geordneter Container mit Random-Access-Zugriff auf die Elemente (vom Typ Object). Es können beliebige Objekte abgelegt werden (inhomogener Container). Implementierungsbasis ist ein Array. Die Größe des Containers kann dynamisch verändert werden (mit automatischer Anpassung). 11 von 67

12 1. Beispiel: Verwendung Vector (1) Direktzugriff auf die Elemente über Index public class ShapeTestFrame extends Frame { public void paint(graphics g) { Vector v = new Vector(3); // mit Kapazitaet 3 v.setsize(3); // Groesse festlegen, vorher 0 Circle c = new DrawableCircle(0,0,50); v.setelementat(c,0); v.setelementat(new DrawableCircle(60,50,20), 1); v.setelementat(new DrawableRectangle(100,100,80,40),2); // Abholen eines Elements c = new DrawableCircle(((Rectangle)v.elementAt(2)).toCircle(); // ein Element bei der Festlegung der Kapazitaet vergessen // macht nichts, Kapazitaet (gleich ziemlich) erhoehen! v.ensurecapacity(10); v.setsize(4); v.setelementat(new DrawableRectangle(70,70,80,40),3); 12 von 67

13 1. Beispiel: Verwendung Vector (2) // Damit wird die Groesse des Vektors implizit um 1 erhöht das neue // Element wird als 2. Komponente eingeschoben, die bisherige 2. wird 3. v.insertelementat(c,2); // Doch keine weiteren Elemente mehr dazu, keinen Speicherplatz vergeuden v.trimtosize(); // Iterieren ueber den Inhalt des Containers for (int i=0; i<v.size(); i++) ((Drawable) v.elementat(i)).draw(g); //cast ist notwendig 13 von 67

14 2. Beispiel: Verwendung Vector Vermeidung des Zugriffs auf die Elemente über Index public class ShapeTestFrame extends Frame { public void paint(graphics g) { // mit Kapazitaet 3 and Kapazitaetszunahme 5 Vector v = new Vector(3,5); v.addelement(new DrawableCircle(0,0,50)); v.addelement(new DrawableCircle(60,50,20)); Rectangle r = new DrawableRectangle(100,100,80,40); // falls nicht sicher, ob schon enthalten, besser abfragen if (!v.contains(r)) v.addelement(r); // Kapazitaet hier erschoepft, wird beim naechsten add um 5 erhoeht v.addelement(new DrawableCircle(r.toCircle())); v.trimtosize(); // Kapazitaet soll gleich Groesse werden Enumeration e = v.elements(); while (e.hasmoreelements()) ((Drawable) e.nextelement()).draw(g); 14 von 67

15 Erläuterungen Klasse Vector 1. Vector kapselt ein Array von Object (Indexbereich von 0 bis size-1) mit dynamisch veränderbarer Größe size. 2. Zu unterscheiden sind (aktuelle) Kapazität (capacity) und Größe (size). Die Größe legt fest, innerhalb welchen Bereichs auf Komponenten über den Index zugegriffen werden darf (gegebenenfalls wird eine ArrayIndexOutOfBoundsException geworfen). Die Kapazität drückt den verfügbaren Speicher im gekapselten Array aus. 3. Bei Bedarf können Kapazität und Größe "manuell" unabhängig voneinander verändert werden. (Methoden capacity(), ensurecapacity(int), size() und setsize(int)). Beim Hinzufügen von Elementen werden gegebenenfalls die Größe (um die Zahl der hinzugefügten Elemente) und die Kapazität (um einen Kapazitätszunahmewert: capacityincrement) automatisch erhöht. 4. Die Veränderung der Kapazität bedeutet Neuallokierung und Umkopieren. 5. Es gibt neben dem Default-Konstruktor einen mit einer vorgegebener Anfangskapazität und einen mit vorgegebenen Werten für Anfangskapazität und Kapazitätszunahme. Der Default für die Anfangskapazität ist 10, der Default bei der Kapazitätszunahme ist: jeweils verdoppeln. 6. Beim Abholen von Komponenten aus dem Vektor muss gecastet werden - wenn keine Generics benutzt werden. 7. Die Methode contains(object) benutzt die Methode equals(object) für die zu prüfenden Elemente.(Erinnerung: von Object geerbt oder geeignet überschrieben!) 8. Die Methode elements() liefert eine Implementierung des Interface Enumeration Dieses hat nur die Methoden hasmoreelements() und nextelement(), realisiert also einen einfachen Iterator. 9. Die Klasse Vector ist thread-safe. 15 von 67

16 Weitere "Uralt"-Container Stacks Die Klasse java.util.stack ist von Vector abgeleitetet. Sie besitzt zusätzlich die für Stacks "üblichen" Methoden. Aus heutiger Sicht "unmöglich"! Bitfelder Die Klasse java.util.bitset verwaltet eine Folge von indizierten logischen Bitwerten, auf denen die üblichen bitweisen logischen Operationen ausgeführt werden können. 16 von 67

17 Klasse Hashtable: Funktion und Einbettung Die ursprüngliche Einordnung in der Vererbungshierarchie Hashtable leitet sich von der Klasse Dictionary ab. Diese abstrakte Klasse ist ein Relikt aus dem JDK1.1 und sollte nun vermieden werden. Sie beinhaltet die abstrakten Methoden, die ein ADT Dictionary besitzen sollte Neuere Form der Einbindung Hashtable implementiert seit JDK1.2 das Interface java.util.map (s. u.) Aufgabe ist das effiziente Wiederfinden von Daten, die durch einen eindeutigen Schlüssel charakterisiert sind. Datum und Schlüssel sind Objekte (bzw. über Generics spezifizierbar), die getrennt voneinander vorliegen können. 17 von 67

18 Beispiel Hashtable: Einfügen, Suchen, Löschen public class HashtableTest { public static void main(string[] args) { // Mit Festlegung der Anfangsgröße und des Load Factors Hashtable htab = new Hashtable(10,1.0f); String str = "first"; Integer one = new Integer(1); htab.put(str, one); htab.put("second", new Double(2.0)); htab.put("third", new Vector()); // htab.put(new Integer(4), new Vector()); // geht das? //str = "fourth"; // was ändert sich dadurch? System.out.println("contains key " + str + ":" + htab.containskey(str)); System.out.println(" has value:" + htab.get(str)); System.out.println("contains value " + one + ":" + htab.contains(one)); System.out.println("htab:"+htab); htab.remove("third"); System.out.println("htab:"+htab); htab.put(new String("first"), new Double(1.0)); // was passiert? System.out.println("htab:"+htab); 18 von 67

19 Beispiel Hashtable: Eigene Schlüssel-Klasse Ein erster Versuch class HashKey { private String str; public HashKey(String str) { this.str = str; public String tostring() { return str; public class KeyTest { public static void main(string[] args) { Hashtable htab = new Hashtable(10,1.0f); htab.put(new HashKey("first"), new Integer(1)); htab.put(new HashKey("second"), new Double(2.0)); System.out.println("htab:"+htab); htab.put(new HashKey("first"), new Double(1.0)); // was passiert? System.out.println("htab:"+htab); Was muss verbessert werden? 19 von 67

20 Erläuterungen zur Klasse Hashtable 1. Die Klasse Hashtable realisiert Hashing mit listenbasierten Buckets. 2. Einträge sind durch einen Schlüssel und einen Wert charakterisiert. Dies sind separate Objekte (jeweils vom Typ Object, falls keine Generics verwendet werden). Schlüssel und Werte können somit bezüglich des Typs sehr heterogen sein, aber meist unerwünscht (vgl. Generics). 3. Die Zahl der Buckets kann im Konstruktor vorgegeben werden (capacity). 4. Sie wird dynamisch vergrößert, wenn ein gewisser Schwellenwert für das Verhältnis zwischen Zahl der gespeicherten Elemente und Zahl der Buckets überschritten wird (loadfactor). 5. Dieser Schwellwert kann im Konstruktor festgelegt werden (Default: 0.75). 6. Der Hashwert wird ermittelt durch die Methode hashcode(): Diese ist in der Klasse Object vorhanden (Der Hashwert wird aus der Speicheradresse berechnet). Sinnvoll überschrieben ist die Methode z. B. in den Klassen String, Float,... Für eine benutzerdefinierte Klasse als Key sollte sie geeignet überschrieben werden! 7. Die Methode put(object key, Object value) überschreibt einen bereits vorhandenen Eintrag mit demselben Hashcode wie key nur dann, wenn die Methode equals() Gleichheit der Schlüssel ermittelt. Es können also mehrere Einträge mit demselben Hashcode in einer Tabelle vorhanden sein. Für eine benutzerdefinierte Klasse, die als Key in einer Hashtabelle eingesetzt wird, sollte sie also auch die Methode equals() geeignet überschrieben werden. 8. Verwendung einer mutable Klasse für Keys kann "tückisch" sein. 9. Man beachte dabei den Performance-Unterschied für die Methoden containskey(object key) und contains(object element)! 10. Die Klasse Hashtable ist Thread-safe! 20 von 67

21 Das Collection-Framework 21 von 67

22 Zweck und Historie Seit JDK 1.2. Gedacht alt erweiterbares Rahmenwerk. Bestandteile: Interfaces, Implementierungen, einige Algorithmen, Muster Die bereits vorher existierenden Container-Klassen Vector und Hashtable wurden nachträglich in dieses Framework mit eingebunden. Erweiterungen im J2SDK_1.5 : "Generics", "foreach", "(un)boxing". Concurrent-API ab Java 6 (wird in dieser Vorl. nicht behandelt) 22 von 67

23 Interface Collection und seine Ableitungen (1) 23 von 67

24 Interface Collection und seine Ableitungen (2) Erläuterungen: Collection steht für den allgemeinsten Container, der eine ungeordnete Ansammlung von Elementen mit evtl. Duplikaten ("Bag") beinhaltet. Diese Interface wird häufig benutzt als Typ von in Methoden zu übergebenden Container-Objekten. Mit dem Iterator kann über die Elemente einer Collection gelaufen werden und gegebenenfalls das letzte besuchte Element gelöscht werden. Einfüge- und Löschmethoden geben einen Boolean-Wert zurück, der angibt, ob der Containerinhalt durch den Methodenaufruf geändert wurde. Das Interface Iterable dient als Markierung für die Anwendung der For-Each-Schleife. Das Interface Set repräsentiert Mengen-Container ohne Duplikate (Die Gleichheit wird dabei mit der equals()-methode bestimmt). Das Interface List repräsentiert geordnete Container (ADT Folge). Der Zugriff auf einzelne Elemente ist über einen Integer-Index möglich. 24 von 67

25 Interface Collection und seine Ableitungen (3) Beispiel: Typsichere Schleifen mit Iterator static void visitelements(collection<string> c) { Iterator<String> iterator = c.iterator(); while (iterator.hasnext()) { String s = iterator.next();... Beispiel: Typsichere Schleifen mit "foreach" static void visitelements(collection<string> c) { for (String s : c ) {... Beispiel: Polymorphes Filtern eines Containerinhalts static boolean dontlike(object o) {... static void filter(collection<?> c) { Iterator<?> it = c.iterator(); while (it.hasnext()) if (dontlike(it.next())) it.remove(); 25 von 67

26 Interface Collection und seine Ableitungen (4) Beispiel: Ersetzen eines bestimmten Wertes in einer Liste durch einen neuen Wert. public static <T> void replace(list<t> list, T value, T newvalue) { ListIterator<T> it = list.listiterator(); while (it.hasnext()) { if (value == null? it.next() == null : value.equals(it.next())) it.set(newvalue); Beispiel: Durchschnitt zweier Mengen set1.retainall(set2); Beispiel: Index eines Elements in einem Teilbereich einer Liste List<String> list =... List<String> sublist = list.sublist(fromindex, toindex); //Ausschnitt der Liste int i = sublist.indexof(s); // index in der Teilliste!! Beispiel: Löschen eines Bereiches einer Liste list.sublist(fromindex, toindex).clear(); 26 von 67

27 Interface Map und seine Ableitungen (1) 27 von 67

28 Interface Map und seine Ableitungen (2) Eigenschaften Das Interface Map repräsentiert Schlüssel-Wert-Paare (key-value pairs): ADT Mapping. Das Interface Map.Entry ein einzelnes Schlüssel-Wert-Paar mit unveränderlichem Schlüssel. Es gibt keinen direkten Iterator für Map. Dafür Collection-Factories für die Schlüssel, die Werte und die Paare (Entries). Beispiel: Iterieren über den Inhalt einer Map Map<String, Integer> map =...; Iterator<Map.Entry<String, Integer>> it = map.entryset().iterator(); while (it.hasnext()) { Map.Entry<String, Integer> entry = it.next(); String key = entry.getkey(); int value = entry.getvalue();... // Alternative mit foreach for (Map.Entry<String, Integer> entry : map.entryset()) { von 67

29 Interfaces für sortierte Container (1) Die Interfaces zur Vorgabe einer Ordnung "Natürliche" Ordnung auf Instanzen einer Klasse per Implementierung von public interface Comparable<T> { int compareto(t o); "Externe" Ordnung auf Elementen per: public interface Comparator<T> { int compare(t o1, T o2); 29 von 67

30 Interfaces für sortierte Container (2) java.util.sortedset Die Elemente müssen per Impl. von Comparable oder durch einen Comparator einer Ordnung unterliegen. Einfügen mit add() erfolgt in sortierter Form. Der Iterator liefert die Elemente dann in aufsteigender Ordnung. Die zusätzlichen Methoden beziehen sich auf diese Ordnung. Ein subset bezieht sich hierbei auf den Bereich zwischen zwei Objekten (nicht zwischen zwei Indizes o. ä.). public interface SortedSet<E> extends Set<E> { SortedSet<E> subset(e fromelement, E toelement); SortedSet<E> headset(e toelement); SortedSet<E> tailset(e fromelement); E first(); E last(); Comparator<? super E> comparator(); 30 von 67

31 Interfaces für sortierte Container (3) java.util.sortedmap Die vorausgesetzte Ordnung bezieht sich auf die Schlüsselobjekte. public interface SortedMap<K,V> extends Map<K,V> { SortedMap<K,V> submap(object fromkey, Object tokey); SortedMap<K,V> headmap(object tokey); SortedMap<K,V> tailmap(object fromkey); K firstkey(); K lastkey(); Comparator<? super K> comparator(); 31 von 67

32 Implementierungen der Collection-Interfaces Informelle Anforderungen 1. Es sollt jeweils mindestens ein Standardkonstruktor (ohne Argumente) und ein "Copy-Konstruktor" implementiert werden. 2. Manche Operationen sind in den Interfaces als optional angegeben. Werden Sie nicht entsprechend der Spezifikation implementiert, sollten sie UnsupportedOperationException werfen. 3. Iteratoren sollen so implementiert sein, dass sie bei zwischenzeitlicher Änderung des Containers eine ConcurrentModificationException werfen (fail-fast-iterators). Dies kann durch einen Zähler modcount für Strukturänderungen in der zugehörigen Containerklasse realisiert werden. Im Gegensatz dazu sind Enumerations (z. B. für Vector) nicht "fail-fast". 32 von 67

33 Abstrakte Collection-Klassen Es sind partielle Implementierungen obiger Interfaces unabhängig von einem Speichermodell im API vorhanden. Konseqenz: Bestimmte Methoden müssen abstrakt bleiben ("Hooks"), andere können unter Verwendung der abstrakten Methoden und Iteratoren implementiert werden. Jedoch kann es aus Performancegründen notwendig sein, in echten Implementierungen manche bereits implementierte Methode trotzdem zu überschreiben. vorhandene abstrakte Klassen: AbstractCollection, AbstractSet, AbstractQueue, AbstractList (für List-Implementierungen mit random-access-speicher), AbstractSequentialList (für List-Implementierungen mit sequentiell organisiertem Speicher), AbstractMap. 33 von 67

34 Allg. Collection-Implem. im JDK (1) Die Einbindung in das Framework am Beispiel ArrayList<E> Beispiel: Instanziierung der Impl.-Klasse und Referenzierung per Interface List<String> list = new ArrayList<String>(); list.add("suse"); von 67

35 Allg. Collection-Implem. im JDK (2) Spezielle Concurrent-Container werden hier nicht aufgezählt. Implementierungen von List ArrayList: dynamisch erweiterbares Array (nicht thread-safe) Vector: dynamisch erweiterbares Array (thread-safe) LinkedList: doppelt verkettete Liste (insbes. für Queues und Deques) Implementierungen von Queue und (oder) Deque LinkedList: doppelt verkettete Liste ArrayDeque: basiert auf Array PriorityQueue: basiert auf Heap Implementierung von Set HashSet: basiert auf Hashtabelle! EnumSet: speziell optimiert für Enum-Elemente. 35 von 67

36 Allg. Collection-Implem. im JDK (3) Implementierung von SortedSet TreeSet: basierend auf TreeMap. Implementierungen von Map Hashtable (thread-safe) HashMap (nicht thread-safe) WeakHashMap: nur anderweitig referenzierte Keys bleiben enthalten IdentityHashMap: Identität der Keys auf Basis von ==, und nicht equals() Implementierung von SortedMap TreeMap: basierend auf einem binären ausgeglichenen Baum (red black tree). 36 von 67

37 Hüllen-Implementierungen (1) Einschub: Decorator Pattern Intention Einem Objekt sollen dynamisch zusätzliche Verantwortlichkeiten übertragen werden. vgl. Hinzufügen von Funktionalität zu einer Klasse in einer abgeleiteten Klasse. typisches Beispiel Hinzufügen eines Randes oder Scroll-Balkens zu einem Graphik-Fenster (Scroll-Decorator oder/und Border-Decorator). Allgemeine Struktur 37 von 67

38 Hüllen-Implementierungen (2) Grundprinzip Die Hüllenimplementierungen folgen dem Decorator Pattern. Sie basieren auf anonymen Implementierungen. Sie werden instanziert durch Factory-Methoden in der Klasse Collections. Hüllen für Schreibschutz Diese verhindern einen Schreibzugriff auf die dahinterliegenden Container-Objekte. Die Lesezugriffe gehen auf den ummantelten Container. public static Collection<T> unmodifiablecollection(collection<t> collection); public static Set<T> unmodifiableset(set<t> set);... Die Klassen Decorator und ConcreteDecorator sind hier jeweils zu einer anonymen Klasse verschmolzen, die durch eine Factory-Methode instanziiert wird. 38 von 67

39 Hüllen-Implementierungen (3) Hüllen zur Synchronisation public static Collection<T> synchronizedcollection(collection<t> collection); public static Set<T> synchronizedset(set<t> set);... Man beachte Die Verwendung eines zugehörigen Iterators muss explizit "mitsynchronisiert" werden. Beispiel Collection<String> mycollection =... Collection<String> collection = Collections.synchronizedCollection(myCollection); synchronized(collection) { Iterator<String> iterator = collection.iterator(); // Must be in the synchronized block! while (iterator.hasnext()) foo(iterator.next()); 39 von 67

40 Sonstige nützliche Implementierungen List-View eines Arrays Methode static List<T> aslist(t... a) in Klasse java.util.arrays. Erläuterungen 1. Die List-Methoden greifen auf das gekapselte Array durch. 2. Die Größe der Liste kann nicht geändert werden. 3. Also Arrays.asList(new Object[size]) liefert eine effiziente Liste mit konstanter Länge size. Unveränderbare Liste mit gleichartigen Kopien als Listeneinträge Methode static List<T> ncopies(int n, T o)in Klasse java.util.collections. Unveränderbare einelementige Menge Methode static Set<T> singleton(t o) in Klasse java.util.collections. Konstanten für leere Menge und leere Liste In der Klasse java.util.collections gibt es: public static final List EMPTY_LIST public static final Set EMPTY_SET 40 von 67

41 Algorithmen für Collections Überblick An Algorithmen auf Collection-Klassen sind implementiert: Sortieren, binäre Suche, Minimum (bzw. Maximum) bestimmen. Entsprechende Algorithmen sind auch für Arrays implementiert (siehe Klasse java.util.arrays). Voraussetzung: Die Klassen der im Container enthaltenen Elemente müssen entweder: einer natürlichen Ordnung unterliegen, d. h. java.util.comparable implementieren oder : per expliziter java.util.comparator-impl. geordnet sein. Comparable wird z. B. implementiert von String, Byte, Character, Short, Integer, Long, Float, Double, BigInteger, BigDecimal, File, URL, Date. Man beachte: Die Vergleichsoperationen müssen mit den equals()-methoden konsistent sein. D. h. die compare()- (bzw. compareto())-methode muss für zwei Objekte genau dann den Wert 0 zurückliefern, wenn die equals()- Methode für die zwei Objekte true zurückliefert. 41 von 67

42 Sortieren (1) Sortiermethoden (def. in der Klasse Collections): static <T extends Comparable<? super T>> void sort(list<t> list) static <T> void sort(list<t> list, Comparator<? super T> c) Beispiel: Sortieren von Argumenten public class SortTest { public static void main(string args[]) { List<String> l = Arrays.asList(args); Collections.sort(l); System.out.println(l); 42 von 67

43 Sortieren (2) Beispiel: zweiteiliger Name mit zugehörigem Comparator public class NameComparator implements Comparator<Name> { public int compare(name n1, Name n2) { int lastcmp = n1.lastname().compareto(n2.lastname()); return (lastcmp!= 0? lastcmp : n1.firstname().compareto(n2.firstname())); public class Name { private String firstname, lastname; public Name(String firstname, String lastname) {... public String firstname() { return firstname; public String lastname() { return lastname; public boolean equals(object other) { if (!(other instanceof Name)) return false; Name name = (Name)other; return name.firstname.equals(firstname) && name.lastname.equals(lastname); public int hashcode() { return 31*firstName.hashCode() + lastname.hashcode(); public String tostring() {return firstname + " " + lastname; 43 von 67

44 Sortieren (3) public class NameSort { public static void main(string args[]) { Name n[] = { new Name("Charly", "Chaplin"), new Name("Karl", "Marx"), new Name("Groucho", "Marx"), new Name("Karl", "Valentin") ; List<Name> l = Arrays.asList(n); Collections.sort(l, new NameComparator()); System.out.println(l); 44 von 67

45 Suchen Suchmethoden (def. in der Klasse 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> comp) Rückgabewert Index des gefundenen Objekts bzw., falls nicht vorhanden, ein Hinweis auf die richtige Einfügeposition (als negative Zahl). Bei von AbstractSequentialList abgeleiteten wird sequentiell gesucht. 45 von 67

46 Min, Max und Co Max-Methoden (def. in der Klasse Collections) static <T extends Object & Comparable<? super T>> T max(collection<? extends T> coll) static <T> T max(collection<? extends T> coll, T key, Comparator<? super T> comp) Analog min() Sonstige Algorithmen (def. in der Klasse Collections static void shuffle(list<?> list, Random rnd) // permute randomly static void shuffle(list<?> list) static void reverse(list<?> l) //reverse the order in the list static <T> void fill(list<? super T> list, T o) // fill whole list with one value static <T> void copy(list<? super T> dest, List<? extends T> src) und weitere. 46 von 67

47 Lambdas 47 von 67

48 Hintergrund Historie Churchs Lambda-Kalkül aus den 1930er Jahren Berechnungsmodell gleichmächtig wie die Turing-Maschine (vgl. Theoretische Informatik) Ausdrücke der Form λx.2x Viele populäre Sprachen besitzen Lambdas bzw. Closures ursprünglich die klassischen funktionalen Sprachen (Lisp, Scheme) mittlerweile auch als funktionale Anteile in imperativen bzw. objektorientierten Sprachen (Python, Ruby, Scala, JavaScript, C#, C++). Seit Java 5 angjährige Diskussion bei Sun über Integration von Lambdas in Java (ursprünglich 3 Vorschläge ohne Konvergenz). Erkenntnis: Java soll nicht zum neuen Cobol werden. Einführung mit dem Java 8. Vorteile Einfachere Syntax und effizientere Implementierung als anonyme Funktionen. Funktionen als Objekte. "Code as Data" Funktionaler Programmierstil hilft bei der Ausnutzung von Multicores. Insbesondere können parallele Arrays und Collections dadurch einfach bereitgestellt werden. 48 von 67

49 Motivation: Execute-Around-Method-Pattern Die Situation Vorbereitung (allgemein) Ausführen einer Aktion (spezifisch) Aufräumen (allgemein) Beispiele acquire resource use resource release resource acquire lock critical section release lock Iterator it = coll.iterator(); while (it.hasnext() element = it.next() visit(element); try { some action catch(...) {... catch(...) {... finally {... Lösung Implementierung der speziellen Teile in jeweils einer Funktion und Aufruf im allgemeinen Rahmen. Funktionsübergabe an den Rahmen-Code. 49 von 67

50 Beispiel (1) Rahmen für interne Iteration class IntArrayUtils { public static void foreach(int[] array, IntConsumer consumer) { for (int i: array) { consumer.accept(i); Das zugehörige Interface (aus dem Java-API) interface Consumer<T> { void accept(t t); 50 von 67

51 Beispiel (2) Aufruf mit anonymer Klasse int[] array = {1,2,3; IntArrayUtils.forEach(array, new public void accept(int value) { System.out.println(value); ); Aufrufe mit Lambdas IntArrayUtils.forEach(array, i -> System.out.println(i)); IntArrayUtils.forEach(array, i -> { if (i%2 == 0) System.out.println(i);); IntConsumer printifodd = i -> { if (i%2!= 0) System.out.println(i);; IntArrayUtils.forEach(array,printIfOdd); 51 von 67

52 Beispiel (3) Eine Methode mit zwei Funktionsparametern class IntArrayUtils {... public static void foreachif(int[] array, IntPredicate predicate, IntConsumer consumer) { for (int value: array) { if (predicate.test(value)) consumer.accept(value); Ein zugehöriger Aufruf IntArrayUtils.forEachIf(array, i -> i%2 == 0, i -> System.out.println(i) ); 52 von 67

53 Syntax von Lambdas Aufbau Lambdas bestehen aus einer Parameterliste und einem Body (getrennt durch ->). Parameter können explizit typisiert sein oder vom Compiler mit einem Typ versehen werden. Der Body kann einem einzelnen Ausdruck, einer Anweisung oder einem Block bestehen. Beispiele x -> 1+ Math.sqrt(x) (Integer x) -> x (x,y) -> x + y typeless param typed param two params () -> 32 no param x -> { double r = x; return r; block as body 53 von 67

54 Lambdas und Typisierung Für Lambdas wurde das Typsystem nicht über die herkömmlichen Typen (primitive Datentypen, Arrays, Klassen,...) hinaus durch eigene Typen erweitert (vgl. z. B. typisierter Lambda-Kalkül). Stattdessen wurde eine Menge von Interfaces mit einer einzelnen abstrakten Methode eingeführt (bzw. bestehende markiert), genannt Functional Interface Types oder SAM (Single Abstract Method). Diese Interfaces in java.util.function sind annotiert. Jedes Lambda muss vom Compiler einem dieser Interfaces zugeordnet werden können. Dies erfolgt über den Kontext des Lambdas. Lamdas sind nur an folgenden Stellen zulässig: rechte Seite einer Zuweisung, aktueller Übergabeparameter, Rückgabewert, hinter einem Cast, u. ä. Dabei werden ggf. die Typen der Lambda-Parameter und des -Ergebnisses deduziert (Deduktionskontext). 54 von 67

55 Beispiel: Typendeduktion import java.util.function.bifunction; import java.util.function.function; import java.util.function.supplier; public class FunctionExecutor { private int value; public FunctionExecutor(int value) { this.value = value; public Double exec(function<integer,double> lambda) { return lambda.apply(value); public Double exec(bifunction<integer,integer, Double> lambda, Integer v2) { return lambda.apply(value,v2); public static void main(string[] args) { FunctionExecutor executor = new FunctionExecutor(12); double res1 = executor.exec(x -> 1+ Math.sqrt(x)); double res2 = executor.exec((integer x) -> x); double res3 = executor.exec((x,y) -> x + y, 3); Supplier lambda = () -> 32; // no param int res4 = lambda.get(); 55 von 67

56 Functional Interfaces (1) Vor Java 8 existierende Typvorlagen public interface Runnable { public void run(); public interface Callable<V> { V call() throws Exception; public interface Comparator<T> { int compare(t o1, T o2); public interface ActionListener extends EventListener { public void actionperformed(actionevent e); Beispiel für Anwendung: new Thread(() -> {... ).start(); 56 von 67

57 Functional Interfaces (2) Mit Java 8 eingeführte zentrale SATs public interface Predicate<T> { boolean test(t t); public interface Function<T,R> { R apply(t t); public interface BinaryOperator<T> { T apply(t left, T right); public interface Consumer<T> { void accept(t t); public interface Supplier<T> { T get(); 57 von 67

58 Variable-Binding Der Mechanismus Im Lambda-Body hat man selbstverständlich Zugriff auf die Parameter und lokale Variable. Zudem können Variablen aus dem umgebenden Kontext einer Lambda-Definition dort mit verwendet werden (lokale Var., Attribute). Lokale gebundene Variable aus dem umgebenden Kontext müssen final bzw. effectiv final sein. Das wird durch den Compiler überprüft. Ein Beispiel public class FunctionExecutor { private int value; public Double exec(function<integer,double> lambda) { return lambda.apply(value); public static void main(string[] args) {... double factor = 3.14; Function<Integer,Double> lambdawithvarbinding = x -> factor * x; double res6 = executor.exec(lambdawithvarbinding); 58 von 67

59 Methoden- und Konstruktorreferenzen Das Konstrukt Statt expliziter Lambda-Definitionen können für SAMs auch Referenzen auf bestehende Objekt-, Klassenmethoden und Konstruktoren eingesetzt werden. Compiler macht auch hier eine Typdeduktion auf Basis des Kontexts. Syntax: receiver::methodname, wobei receiver eine Klasse oder ein Objekt sein kann. Beispiele class IntArrayUtils { public static void foreach(int[] array, IntConsumer consumer) {... public static void main(string[] args) {... IntArrayUtils.forEach(array, System.out::println); public class FunctionExecutor { public Double exec(function<integer,double> lambda) {... public static void main(string[] args) {... double res = executor.exec(math::sqrt); Function<String,StringBuilder> lambda = StringBuilder::new; StringBuilder sb = lambda.apply("hallo").append(" Welt"); 59 von 67

60 Collections und Lambdas 60 von 67

61 Einstieg Ein einfaches Beispiel List<Integer> list = Arrays.asList( 8, 13, 1, 35, 4 ); list.foreach( i -> System.out.print(" " + i)); System.out.println(); list.sort((i,j) -> i.compareto(j)); list.foreach( i -> System.out.print(" " + i)); List<Integer> list2 = new ArrayList<Integer>(list); list2.removeif(i -> i%2 == 0); Erklärung default void foreach(consumer<? super T> action) wurde mit Java 8 in das Interface Iterable<T> aufgenommen. sort(comparator<? super E>) hat als Parameter ein Functional-Interface. default boolean removeif(predicate<? super E> filter) ist neu im Interface Collection<E>. 61 von 67

62 Aggregatoperationen (1) Charakteristiken Auf einer Ansammlung von Elementen soll eine Operation ausgeführt werden. Typische Vertreter: Operationen rein mit Seiteneffekt (z. B. Ausgabe) Filtern Abbildung pro Element ausführen (Mapper) Konsolidierung auf einen oder mehrere Werte (Reducer) Bestandteile: Quelle (Array, Collection, I/O-Channel, Generatorfunktion,...) und die eigentliche Operation. Iteration erfolgt intern: Nicht wie iteriert wird, muss spezifiziert werden, sondern nur, was auf jedem Element zu passieren hat. Operationen sollten verkettet werden können: Pipelining. 62 von 67

63 Aggregatoperationen (2) Aggregatoperationen für Collections ab Java 8 Die Operationen werden als Lamdas formuliert. Die Ausführung erfolgt nicht auf den Collections selbst sondern davon abgeholten Streams (Folge von Elementen). Die Klasse java.util.stream.stream (und die Pendants für primitive Datentypen (IntStream, LongStream, DoubleStream) haben folgende Gruppen von Aggregat-Funktionen (mit Functional-Interfaces als Parameter): Zwischenfunktionen (filter(), map(),...), die wieder einen Stream zurückliefern Abschlussoperationen (foreach(), count(), collect(),...), die Seiteneffekt oder Ergebnis produzieren. Streams sind träge: D. h. Berechnungen an der Quelle und Abholen der Elemente erfolgt erst bei Bedarf 63 von 67

64 Beispiele (1) Die Ausgangsdaten List<Integer> integerlist = Arrays.asList( 8, 13, 1, 2, 35, 4 ); int[] intarray = { 9, 17, 1, 2, 36, 3 ; List<String> stringlist = Arrays.asList( "hello world", "good bye" ); String string = "to be or not to be is the question to be answered"; Einfache Zwischen- und Abschlussfunktionen // intermediate function filter and terminal function count long count = integerlist.stream().filter(n -> (n > 1) && ((n==2) (n % 2)!= 0)).filter(n -> isprime(n)).count(); // sort and map integerlist.stream().sorted() // type Stream<Integer>.map(n -> n + ":" + isprime(n)) // type Stream<String>.forEach(s -> System.out.println(s)); // result of type Optional Optional<Integer> primeoptional = integerlist.stream().filter(n -> isprime(n)).findany(); if (primeoptional.ispresent()) System.out.println("found prime: " + primeoptional.get()); else System.out.println("no prime in list"); 64 von 67

65 Beispiele (2) Streams direkt auf Arrays Arrays.stream(intArray) // is of type IntStream.sorted().mapToObj(n -> n + ":" + isprime(n)) // type Stream<String>.forEach(s -> System.out.println(s)); Map-Reduce // map reduce pattern int sumofsquares = integerlist.stream().map(i -> i * i).reduce(0, (i,j) -> i + j); int charcount = stringlist.stream().maptoint(s -> s.length()).reduce(0, (i,j) -> i+j); // alt. by specialized reduction function charcount = stringlist.stream().maptoint(s -> s.length()).sum(); String uppercasetext = stringlist.stream().map(s -> s.touppercase()).reduce("", (s,t) -> s + " " + t); 65 von 67

66 Beispiele (3) Collect Im Unterschied zu reduce wird nicht bei jedem Schritt ein neuer Wert erzeugt. // collect as mutable reduction Map<String,Integer> wordcountmap = Arrays.asList(string.split(" ")).stream().collect(hashmap::new, (HashMap map,string s) -> { Integer i = map.get(s); if (i == null) map.put(s,1); else map.put(s,i+1);, (map1,map2) -> map1.putall(map2)); Map<String,List<String>> groupedwords = Arrays.asList(string.split(" ")).stream().collect(collectors.groupingby(c -> c)); Map<String,Integer> wordcountmap2 = Arrays.asList(string.split(" ")).stream().collect(collectors.groupingby( c -> c, Collectors.reducing(0, i -> 1, Integer::sum))); double average = integerlist.stream().collect(collectors.averagingint((integer i) -> i)); 66 von 67

67 Beispiele (4) Flat-Map // map versus flatmap stringlist.stream().map(s -> Arrays.asList(s.split(" "))).foreach(s -> System.out.println(s)); stringlist.stream().flatmap(s -> Arrays.asList(s.split(" ")).stream()).foreach(s -> System.out.println(s)); stringlist.stream().map(s -> s.chars()).foreach(s -> System.out.println(s)); stringlist.stream().flatmaptoint(s -> s.chars()).foreach(s -> System.out.println((char)s)); Parallele Streams // parallel stream integerlist.parallelstream().sorted().map(n -> n + ":" + Thread.currentThread()).forEach(s -> System.out.println(s)); 67 von 67

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

19 Collections Framework

19 Collections Framework Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Vorteile: Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails.

Mehr

19 Collections Framework

19 Collections Framework Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Vorteile: Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails.

Mehr

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

12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält. Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Interfaces Maps and Collections Iterable Collection Map Vorteile: Set List Queue SortedMap

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

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

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff Die Java Stream API Funktionale Programmierung mit der Stream API des JDK 1.8 Prof. Dr. Nikolaus Wulff Funktionale Programmierung Neben der Collection API mit default Methoden ist als weitere Neuerung

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

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

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

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

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 32 Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 32 equals und hashcode SortedSet NavigableSet Assoziative Container 2 / 32 HashSet mit eigener Klasse Wie kann man einen

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

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

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff Java Schulung Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen Prof. Dr. Nikolaus Wulff Collections in Java 2 Java 2 Collections: http://java.sun.com/products/jdk/1.2/docs/guide/collections/index.html

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Info B VL 14: Java Collections/Reflections

Info B VL 14: Java Collections/Reflections Info B VL 14: Java Collections/Reflections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 14: Java Collections/Reflections

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

OCP Java SE 8. Collections

OCP Java SE 8. Collections OCP Java SE 8 Collections Collections (Interfaces) Iterable Collection Set List Queue SortedSet Deque Collection List erlaubt Duplikate und null behält die Reihenfolge Set erlaubt keine Duplikate Queue

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am

Mehr

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

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

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

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Aufgabenblatt 4 Aufgabe 1 1. Erläutern Sie in eigenen Worten die Begriffe Datenstruktur, Datentyp und abstrakter Datentyp. Nutzen Sie das Beispiel

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer   144 Rechtsbelehrung Dieser Foliensatz ist urheberrechtlich geschützt. Änderungen an den Folien sind untersagt. Ausschließlich eine nicht-kommerzielle Nutzung ist kostenfrei. Andernfalls wird eine Gebühr fällig.

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

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

Lösungsvorschläge. zu den Aufgaben im Kapitel 4 Lösungsvorschläge zu den Aufgaben im Kapitel 4 Aufgabe 4.1: Der KNP-Algorithmus kann verbessert werden, wenn in der Funktion nexttabelle die Zuweisung next[tabindex] = ruecksprung; auf die etwas differenziertere

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

JAVA KURS COLLECTION

JAVA KURS COLLECTION JAVA KURS COLLECTION COLLECTIONS Christa Schneider 2 COLLECTION Enthält als Basis-Interface grundlegende Methoden zur Arbeit mit Collections Methode int size() boolean isempty() boolean contains (Object)

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (2/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Listen Bisher: Collections

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer Datenstrukturen In vielen Sprachen

Mehr

Java Virtual Machine (JVM) Bytecode

Java Virtual Machine (JVM) Bytecode Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

5. Abstrakte Klassen

5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Suchbäume Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

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 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

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

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

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

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

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

Java Generics & Collections

Java Generics & Collections Java Praktikum Effizientes Programmieren (Sommersemester 2015) Dennis Reuling Agenda 1 2 3 1 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015) Java Subtyping Teil 1 2 / 30 Praktikum Effizientes

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Nützliche Utility-Klassen des JDK

Nützliche Utility-Klassen des JDK Nützliche Utility-Klassen des JDK java.util :, Properties, I18N, Scanner java.text : Ausgabeformatierung u.a. java.util.prefs : Hierarchische Konfigurationsdaten (1.5) java.util.logging : Aufzeichnung

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

ADT: Java Collections und ArrayList

ADT: Java Collections und ArrayList ADT: Java Collections und ArrayList Überblick der Klassen Object File Collections Map List Set ArrayList LinkedList SortedSet HashSet SortedSet Methode ArrayList Klasse I Beschreibung void add(int position,

Mehr

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 A. Beschreibung der Projektarbeit. Welche Aufgabe haben Sie im Rahmen der Projektarbeit gelöst? 2. Mit welchen Tools bzw. Programmen (Anwendung,

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Aufgabenblatt Nr. 5 Generizität und TicTacToe Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung

Mehr

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

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock. Schein-/Bachelorklausur Teil 2 am 13.02.2007 Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock. Alle Studiengänge außer Bachelor melden sich über die Lehrstuhlwebseite

Mehr

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

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte

Mehr

Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper

Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 1 Einleitung Collections sind Datenstrukturen für Sammlungen von Daten Stacks Queues Priority

Mehr

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

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1 IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft

Mehr

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

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Kapitel 6: Java Collection Teil I

Kapitel 6: Java Collection Teil I Kapitel 6: Java Collection Teil I Übersicht Bemerkungen Collection List LinkedList und ArrayList Queue und Deque ArrayDeque 6-1 In diesem Kapitel Die Java-API enthält eine Sammlung von generischen Schnittstellen

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

J.5 Die Java Virtual Machine

J.5 Die Java Virtual Machine Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class

Mehr

Mengen und Multimengen

Mengen und Multimengen Überblick 21. Datenstrukturen 21.1 Einleitung 21.2 Listen 21.3 Assoziative Speicher 21.4 Bäume 21.5 Mengen 21.6 Das Collections-Framework in Java 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 870

Mehr

Propädeutikum Programmierung in der Bioinformatik

Propädeutikum Programmierung in der Bioinformatik Propädeutikum Programmierung in der Bioinformatik Java Collections Thomas Mauermeier 15.01.2019 Ludwig-Maximilians-Universität München Collections? Was ist eine Collection? Container für mehrere Objekte

Mehr

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut. Binäre Suchbäume Tries (Folie 182, Seite 58 im Skript) In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut. In Tries entspricht die ite Verzweigung dem iten Zeichen des Schlüssels.

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Programmieren Tutorium

Programmieren Tutorium Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,

Mehr

Tutorium 5 - Programmieren

Tutorium 5 - Programmieren Tutorium 5 - Programmieren Grischa Liebel Uni Karlsruhe (TH) Tutorium 11 1 Einleitung 2 Abschlussaufgaben 3 Vorlesungsstoff 4 Ergänzungen zum Vorlesungsstoff Grischa Liebel (Uni Karlsruhe (TH)) c 2008

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr