Java Collection Framework
|
|
- Robert Salzmann
- vor 6 Jahren
- Abrufe
Transkript
1 Java Collection Framework Java-Standard-Bibliothek zahlreicher Datencontainer Alle gängigen Datenstrukturen zur Verfügung Trennung von Schnittstellen (IF / ADTs) und Implementierungen Verwendung von Generics Typsicher, keine Typ-Vermischungen, keine Downcasts Ziel ist nur ordnender Überblick - keine Auflistung aller Klassen Nicht alles wird besprochen - Rest dient als Wissensspeicher / Lese-Übung Alle Details : M.Naftalin, P.Wadler, "Java Generics and Collections", O'Reilly, 2007 Einige Abbildungen + Inhalte wurden dem Skript von Prof. Dr. Deck entnommen (67)
2 Java Collection Framework Grundsätzlicher Aufbau Einführende Beispiele (68)
3 Java Collection Framework Bibliothek zur Verwaltung verschiedener Sammlungen = Collections von Objekten Collection : Oberbegriff für Sammlung, Gruppe, Menge, Liste Alles im Paket java.util Framework besteht aus : Interfaces Hierarchie von Abstrakten Datentypen ADTs Implementierungen Hierarchie von Klassen - teils abstrakt, teils konkret verschiedene Implementierungen abstrakter Datentypen - z.b. ArrayList / LinkedList Algorithmen Implementierte Algorithmen für typische Operationen auf Collections (z.b. Suchen und Sortieren) Zwei grundsätzliche ADTs : Collection und Map (69)
4 Java Collection Framework - Interface-Hierachie M.Naftalin, P.Wadler "Java Generics and Collections", O'Reilly, 2007 Alle Collections sind iterabel Maps nicht (nicht direkt) (70)
5 Java Collection Framework - Anforderungen Verwender der Datenbehälter muss (praktisch immer) für seine Klassen eine erforderliche Infrastruktur implementieren Denn: Andernfalls werden Objekte nicht sicher / nicht konsistent verwaltet Anforderungen an Klassen-Infrastruktur : Sinn der Maßnahme equals( ) : hashcode( ) : compareto( ) : tostring( ) : Prüfung, ob Collection ein bestimmtes Element schon enthält Verwendung bei Collections auf Basis von Hash Tables Verwendung bei geordneten Collections zum korrekten Einsortieren Ausgabe des Inhalts einer Collection (71)
6 Java Collection Framework - Eingangsbeispiele import java.util.*; class Collection01 { // raw-type Variante public static void main( String[ ] args ) { Beispiel 1 : Datenbehälter nutzen Implementierungen setzen IF Collection um und erlauben Speichern beliebiger Objekte Collection c ; // IF-Collection : ADT c = new ArrayList( ) ; // ArrayList : eine konkrete Implementierung // alternativ : new LinkedList( ) / new HashSet( ) c.add( new Integer(8) ) ; // Hinzufügen von Elementen c.add( new Integer(2) ) ; Verwendung alternativer Implementierungen unterscheidet sich in Semantik z.b. keine Akzeptanz von Duplikaten in HashSet c.add( new Integer(9) ) ; c.add( new Integer(2) ) ; c.add( "Hallo" ) ; Integer i = new Integer(8) ; System.out.println( c.contains( i ) ) ; System.out.println( c ) ; // impliziter Aufruf : tostring( ) Vorsicht : add() kopiert Referenz aufs Orginal Man ist selbst für Kopie zuständig! contains() arbeitet intern mittels equals() die Objekte sollten equals() + hashcode() implementieren sonst wird nur Identität geprüft - nicht Äquivalenz! (72)
7 Java Collection Framework - Eingangsbeispiele import java.util.*; class GenericCollection01 { public static void main( String[ ] args ) { Beispiel 1 : Generischen Datenbehälter nutzen Collection<Integer> c = new ArrayList<Integer>( ) ; c.add( new Integer(8) ) ; // Hinzufügen von Elementen c.add( new Integer(2) ) ; c.add( new Integer(9) ) ; c.add( new Integer(2) ) ; c.add( "Hallo" ) ; // Compiler prüft Typfehler! Integer i = new Integer(8) ; Dank Generics herrscht Typsicherheit es lassen sich beliebige Objekte eines vorgegebenen Typs ablegen und einheitlich behandeln Nicht passende Typen werden vom Compiler abgewiesen System.out.println( c.contains( i ) ) ; System.out.println( c ) ; // impliziter Aufruf : tostring( ) Datenbehälter des Collection Frameworks verlangen nicht, dass die übergebenen Objekte Cloneable sind Deshalb wird auch stets die Referenz übernommen - und keine Kopie erstellt Wichtiges Detail : null-werte werden als Datenelemente akzeptiert und führen zur Erhöhung der internen size Docu im Detail konsultieren! (73)
8 Java Collection Framework - Eingangsbeispiele import java.util.*; class Collection02 { // nicht generisch public static void main( String[ ] args ) { Beispiel 2 : Sortieren einer Liste List c ; // ADT Subtyp von Collection c = new ArrayList( ) ; // Implementierung // alternativ : new LinkedList( ) c.add( new Mitarbeiter( 13, "Hans" ) ) ; Konkrete Implementierungen werden durch Tool-Klasse Collections unterstützt. c.add( new Mitarbeiter( 10, "Udo" ) ) ; c.add( new Mitarbeiter( 11, "Inge" ) ) ; Enthält nützliche Algorithmen in Form statischer Methoden. System.out.println( c ) ; // Ausgabe Collections.sort( c ) ; // Sortieren Kriterium auf nächster Folie System.out.println( c ) ; // Ausgabe (74)
9 Java Collection Framework - Eingangsbeispiele class Mitarbeiter implements Comparable { private int persnr ; private String name ; public Mitarbeiter(int persnr, String name ) { this.persnr = persnr ; this.name = name ; public String tostring( ) { return persnr + "," + name ; Beispiel 2 : Sortieren einer Liste Festlegung des Sortierkriteriums für die betreffenden Objekte durch Implementieren des IFs Comparable Methode sort( ) der Tool-Klasse arbeitet mit Comparable-Objekten public int compareto( Object o ) { Mitarbeiter m = (Mitarbeiter) o ; Bei Verwendung Raw-Type ist Cast zu Mitarbeiter erforderlich return this.persnr - m.persnr ; Wenn Mitarbeiter nicht Comparable implementiert, dann Compilerfehler bei Collections.sort( ) (75)
10 Java Collection Framework - Eingangsbeispiele import java.util.*; class GenericCollection02 { public static void main( String[] args ) { List<Mitarbeiter> c = new ArrayList<Mitarbeiter>( ) ; c.add( new Mitarbeiter( 13, "Hans" ) ) ; c.add( new Mitarbeiter( 10, "Udo" ) ) ; c.add( new Mitarbeiter( 11, "Inge" ) ) ; Beispiel 2 : Generisches Verwenden und Sortieren einer Liste Vergleichsmethode kann sich nun direkt auf Typ Mitarbeiter beziehen, so dass Downcasten entfällt! System.out.println( c ) ; Collections.sort( c ) ; System.out.println( c ) ; class Mitarbeiter implements Comparable<Mitarbeiter> { private int persnr ; private String name ; public Mitarbeiter( int persnr, String name ) { this.persnr = persnr ; this.name = name ; public String tostring( ) { return persnr + "," + name ; public int compareto( Mitarbeiter m ) { return this.persnr - m.persnr ; (76)
11 Java Collection Framework Designprinzip + Architektur Darstellung an fiktivem Beispiel (77)
12 Java Collection Framework - Prinzipieller Aufbau Zusammenspiel von Interface - abstrakten Klassen - konkreten Klassen Selbst definiertes fiktives Beispiel : SimpleListCollection Interface SList gibt Schnittstelle + Semantik vor ADT abstrakte Klasse AbstractSList stellt teilweise Implementierung zur Verfügung konkrete Klassen LinkedSList + ArraySList alternative komplette Implementierungen Man kann die fertigen konkreten Implementierungen benutzen kann sich aber auch auf die abstrakte Teilimplementierung beziehen und diese durch Überschreiben selbst konkretisieren oder das gesamte Interface selbst implememtieren! AbstractSList SList Interface abstrakte Klasse konkrete Klasse ArraySList LinkedSList Anmerkung : SList ist ein selbstentworfenes fiktives Beipiel, ist nicht (!) Teil des Collection Frameworks dort finden sich jedoch analoge Verhätnisse (78)
13 Java Collection Framework - Nomenklatur AbstractSList SList Interface abstrakte Klasse Abstrakter Datentyp konkrete Klasse ArraySList LinkedSList Art der Implementierung Unterschiedliche Techniken Direkt nutzbar interface SList { /*... */ // ADT abstract class AbstractSList implements SList { /*... */ Diese Art der Namens-Bildung wird im realen Collection Framework durchgehend verwendet class ArraySList extends AbstractSList { /*... */ class LinkedSList extends AbstractSList { /*... */ (79)
14 Java Collection Framework - Fiktives Bsp SimpleListCollection public interface SList { // einige Methoden... public boolean add( Object o ) ; // Hinzufügen eines Elements public int size( ) ; // Anzahl Elemente public Object get( int pos ) ; // Element an Position pos public boolean contains( Object o ) ; // Element enthalten? public boolean remove( Object o ) ; // Löschen eines Elements public boolean addall( SList ls ) ; // Hinzufügen aller Elemente einer SList public interface SList<E> { public boolean add( E o ) ; public int size( ) ; public E get( int pos ) ; public boolean contains( E o ) ; public boolean remove( E o ) ; public boolean addall( SList<E> ls ) ; Vorgaben des Interfaces Semantik des ADT : addall( SList ls ) Hinzufügen aller Elemente einer SList = Instanz einer beliebigen SList-Implementierung add( ) addall( ) remove( ) Rückgabewert true, falls sich Inhalt ändert Nicht im Interface spezifiziert Anforderungen an Konstruktoren Können null-werte zurückgeliefert werden? Zurückliefern von null sollte bedeuten, dass gesuchtes Elemente nicht vorhanden ist! Tatsächliche Unterstützung von Methoden - hier : remove( ) (80)
15 Java Collection Framework - Bsp SimpleListCollection public abstract class AbstractSList implements SList { public abstract int size( ) ; public abstract Object get( int pos ) ; public abstract boolean add( Object o ) ; public boolean contains( Object o ) { if( o == null ) return false ; for( int i=0; i<size( ); i++ ) { if( get(i).equals( o ) ) return true ; return false ; public boolean addall( SList slt ) { /*... */ public boolean remove( Object o ) { throw new UnsupportedOperationException( ) ; public String tostring( ) { StringBuffer sb = new StringBuffer( "[" ) ; for( int i=0; i<size(); i++ ) { sb.append( get(i) ) ; sb.append( ",") ; return sb.append( "]" ).tostring() ; Diese Methoden bleiben abstrakt Typischer Aufbau einer abstrakten Teilimplementierung AbstractSList Diese Methoden werden implementiert teilweise unter Rückgriff auf die noch abstrakten Methoden! Anmerkung : Wie beim original CF arbeitet auch hier contains() intern mittels equals() Gespeicherte Objekte sollten equals() und hashcode() überschreiben, damit contains() bei Äquivalenz true liefert. (81)
16 Java Collection Framework - Bsp SimpleListCollection Erläuterung zur Abstrakten Teilimplementierung von SList - Kriterien : Methoden get( ) size( ) add( ) : Sie können erst in konkreter Implementierung umgesetzt werden da von zugrundeliegender technischer Struktur abhängig Sieht anders aus für arraybasierte oder listenbasierte Umsetzung Werden erst in implementierender Klasse konkret überschrieben Einige Methoden können in abstrakter Klasse jedoch schon durch andere formuliert werden. Folgende Methoden lassen sich schon in abstrakter Klasse konkret formulieren durch Rückgriff auf die abstrakten Methoden : tostring( ) Iterieren über SList und Abgriff der Daten durch Methode get() contains( Object o ) Iterieren über SList und equals()-vergleich mit Object o addall( SList slt ) Iterieren über slt und Aufruf von add( slt.get(i) ) Anmerkung : Grundlegender Mechanismus ist Inversion of Control (82)
17 Java Collection Framework - Bsp SimpleListCollection public class LinkedSList extends AbstractSList { public boolean add( Object o ) {... public Object get( int pos ) {... Einfachere Ausimplementierung in konkreten Unterklassen LinkedSList und ArraySList : public int size( ) {... nächste Seite Nur noch drei abstrakte Methoden müssen implementiert / überschrieben werden nicht alle Methoden des Interfaces. public class ArraySList extends AbstractSList { public boolean add( Object o ) {... public Object get( int pos ) {... public int size( ) {... Teil der Arbeit wurde schon in abstrakter Klasse geleistet. Auch andere / weitere Implementierungen könnten analog auf der abstrakten Klasse aufbauen Weitere Optionen : Implementierung von Konstruktoren Implementierung von wirksamer Methode remove() durch Überschreiben Überschreiben von Methodendefinitionen der abstrakten Klasse zur weiteren Anpassung (83)
18 Java Collection Framework - Bsp SimpleListCollection public class LinkedSList extends AbstractSList { private Node head = null ; private int size = 0 ; public boolean add( Object o ) { // vorne einfügen if( o==null ) return false ; head = new Node( o, head ) ; size++ ; return true; public Object get( int pos ) { Es werden keine null-werte als Datenelemente akzeptiert! if ( pos < 0 pos >= size ) throw new IndexOutOfBoundsException( ) ; Node p = head ; for( int i=0; i<pos; i++ ) p = p.next ; return p.val ; public int size( ) { return size ; private class Node { // inner class public Object val ; public Node next ; public Node( Object o, Node next ) { val = o ; this.next = next ; Konkrete Ausimplementierung in der Klasse LinkedSList Anmerkung : Wie beim echten CF erstellt add() selbst keine Kopie des Original-Objekts, sondern weist die übergebene Referenz zu! (betrifft auch Methode addall() ) Es wird nicht vorausgesetzt, dass die übergebenen Objekte vom Typ Cloneable sind (84)
19 Java Collection Framework - Bsp SimpleListCollection - Generics public interface SList<E> { public boolean add( E o ) ; public int size( ) ; public abstract class AbstractSList<E> implements SList<E> { public abstract int size( ); public abstract E get( int pos ); public abstract boolean add( E o ); public E get( int pos ) ; public boolean contains( E o ) ; public boolean remove( E o ) ; public boolean addall( SList<E> ls ) ; Klassenhierarchie in generischer Form public boolean contains( E o ) { if( o==null ) return false ; for( int i = 0; i < size(); i++ ) { if ( get(i).equals( o ) ) return true ; return false ; public boolean addall( SList<E> slt ) { for( int i = 0; i < slt.size(); i++ ) { add( slt.get(i) ); return true; public boolean remove( E o ) { throw new UnsupportedOperationException( ); public String tostring( ) { StringBuffer sb = new StringBuffer("["); for( int i = 0; i < size(); i++ ) { sb.append( get(i) ); sb.append(","); return sb.append( "]" ).tostring( ) ; (85)
20 Java Collection Framework - Bsp SimpleListCollection - Generic public class LinkedSList<E> extends AbstractSList<E> { private Node head = null; private int size = 0; public boolean add( E o ) { if( o==null ) return false ; head = new Node( o, head ) ; size++; return true; public E get( int pos ) { Es werden keine null-werte als Datenelemente akzeptiert! Klassenhierarchie in generischer Form Konkrete Implementierung der LinkedSList<E> if( pos < 0 pos >= size ) throw new IndexOutOfBoundsException(); Node p = head; for( int i = 0; i < pos; i++ ) p = p.next; return p.val; Durch Überschreiben der drei abstrakt geerbten Methoden aus AbstractSList<E> public int size() { return size; private class Node { public E val ; public Node next; public Node( E o, Node next ) { val = o; this.next = next; (86)
21 Java Collection Framework Aufbau des realen Collection Frameworks : Zentrale Interfaces Abstrakte Teilimplementierungen (87)
22 Java Collection Framework - Aufbau Paket java.util Zahlreiche konkrete Implementierungen Hier nur die zentrale Auswahl JDK-Docu!! Entwickler kann & sollte sich geeignete Implementierung aussuchen z.b. : Array-basiert (schneller Read) versus LinkedList-basiert (schneller Insert) Aufbau Interfaces Nur Objekte als Datenelemente zugelassen, keine primitiven Typen Wrappen bzw. AutoBoxing abstrakte Klassen konkrete Implementierungen Algorithmen (Suchen & Sortieren) Collection-Klassen sind iterierbar Datenbehälter aus Performance-Gründen nicht synchronisiert = nicht-threadsicher! Threadsichere Behälter in java.util.concurrent (88)
23 Java Collection Framework - Aufbau Zwei unabhängige IF-Hierarchien + Basisdatentypen ADTs Collection wesentliche Eigenschaften - jedoch Vorgabe der Sammelstrategie erst durch folgende IFs : List positionsorientierte Sammlung von Objekten (Sequenz / Reihung) - Duplikate erlaubt! Lineare Einfügereihenfolge erhalten, positioniertes Auslesen / Einfügen via Index Set mengenorientierte Sammlung von Objekten - ohne Duplikate / keine Einfügetreue! als SortedSet in aufsteigend geordneter Form Queue als Deque mit beidseitiger Einfüge- und Entnahme-Semantik (s.u.) Map Jedem eindeutigen Schlüssel ist ein Wert zugeordnet Key-Value-Paar - Semantik SortedMap : intern nach Schlüssel sortiert (89)
24 Java Collection Framework - Collection Ausschnitt AbstractCollection Collection AbstractQueue Queue AbstractList List AbstractSet Set AbstractSequentialList HashSet ArrayList LinkedList TreeSet SortedSet Implementierungen auf Basis von Arrays, verketteten Listen, Hashtables, Bäumen Vorteil Array : Schneller direkter Zugriff auf Positionen - wenn Einfügen meist am Ende Vorteil LinkedList : Einfügen an beliebigen Positionen - wenn positioniertes Lesen selten Vorteil TreeSet : Aufsteigende Sortierung erstellt - und so auch iteriert durch Iterator Spezialisierungen : NavigableSet, LinkedHashSet, EnumSet... Queue, Deque, ArrayDeque, PriorityQueue... (90)
25 Java Collection Framework Collections : Lists und Sets (91)
26 Java Collection Framework - IF Collection Nur einige Methoden der Basis-Interfaces public interface Collection<E> extends Iterable<E> { public boolean add( E e ) ; // Hinzufügen eines Elements Erfolgsfall true public int size() ; // Anzahl der Elemente public void clear() ; // löscht alle Elemente public boolean contains( Object e ) ; // ist Element e enthalten? public boolean isempty() ; // ist Collection leer? public boolean remove( Object e ) ; // Löscht erstes(!) vorkommendes Elements e public Iterator<E> iterator( ) ; // liefert Iterator public boolean removeall( Collection<?> c ) ; // Löscht alle Elemente der Collection c aus Collection public boolean addall( Collection<? extends E> c ) ; // Hinzufügen aller Elemente der Collection c of E //... Semantik : add() addall() remove() Rückgabe true, falls Collection geändert - null akzeptiert! (92)
27 Java Collection Framework - IF List und Set public interface List<E> extends Collection<E> { public void add( int pos, E e ) ; // fügt Element e an Position pos ein, indiziert ab 0 public E get( int pos ) ; // Element an Position pos public int indexof( Object e ) ; // Index ersten Vorkommens des Elements e public E remove( int pos ) ; // entfernt Element an Position pos + gibt es zurück public E set( int pos, E e ) ; // ersetzt Element an pos durch e und gibt es zurück add() get() set() remove() IndexOutOfBoundsException bei nicht vorhandener Position add( E e ) : Einfügen am Ende remove( E e ) : Erstes Element e mit kleinstem Index Interface Set<E> hat gleiche (!) Schnittstelle wie Collection Aber mit Semantik nicht zugelassener Duplikate bei add-operationen! Reihenfolge der Elemente nicht spezifiziert nicht linear einfügetreu! Erst durch spezielle Implementierung gemäß Doku des Interfaces ergibt sich somit ein Verhalten, das sich von Listen unterscheidet Erst Interface SortedSet<E> fügt Methoden wie first(), last() etc. hinzu (93)
28 Java Collection Framework - Implementierungen Interfaces stellen an einzufügende Objekte keine speziellen Anforderungen : Es wird nicht gefordert, dass übergebene Objekte das IF Cloneable implementieren Die Methoden kopieren die Referenz aufs Orginal-Objekt man ist selbst für defensive copy zuständig! Falls man nur Objekt-Kopie an Datenbehälter übergeben will, benötigt Klasse clone() - Methode! import java.util.* ; class CopyTest { public static void main( String[] args ){ Collection<Mitarbeiter> c = new ArrayList<Mitarbeiter>( ) ; Mitarbeiter m1 = new Mitarbeiter(4711) ; c.add( m1 ) ; // Referenz auf Original in ArrayList c.add( m1.clone( ) ) ; // Nur Kopie class Mitarbeiter implements Cloneable { private int id ; public Mitarbeiter( int n ) { id = n ; public Mitarbeiter clone( ) { Mitarbeiter m = null ; try { m = (Mitarbeiter) super.clone( ) ; catch( CloneNotSupportedException e ) { return m ; //... (94)
29 Java Collection Framework - Implementierungen Methode contains() und andere verwenden für Objektvergleiche deren Methode equals( ) Aufgenommene Objekte sollten equals() + hashcode() konsistent überschreiben sonst wird stets nur Identität festgestellt (gemäß equals-implementierung von Object) - nicht Äquivalenz! import java.util.* ; class ContainsTest { public static void main( String[] args ){ Collection<Mitarbeiter> c = new ArrayList<Mitarbeiter>( ) ; Mitarbeiter m1 = new Mitarbeiter(4711) ; Mitarbeiter m2 = new Mitarbeiter(4711) ; c.add( m1 ) ; boolean check = c.contains( m2 ) ; class Mitarbeiter { private int id ; public Mitarbeiter( int n ) { id = n ; public boolean equals( Object o ) { if( this == o ) return true ; if( o==null this.getclass()!= o.getclass() ) return false ; Mitarbeiter m = (Mitarbeiter) o ; return this.id == m.id ; public int hashcode( ) { return id ; contains() liefert false, wenn Klasse Mitarbeiter equals() nicht überschreibt Dagegen true mit nebenstehender equals( ) - Implementierung! (95)
30 Java Collection Framework - List-Implementierungen Klassen ArrayList<E> und LinkedList<E> : Haben u.a. Konstruktoren, denen bereits gefüllte Collection-Datenstruktur übergeben werden kann, deren Elemente dann übernommen werden Bsp : ArrayList<E>( Collection<? extends E> ) ArrayList : Array-basierte Implementierung Diverse Konstruktoren - u.a. mit Vorgabe der anfänglichen Array-Länge Wenn Anfangslänge überschritten wird, findet automatische Vergrößerung statt ( = Anlegen neues Array + Kopieren der Elemente) LinkedList : Verkettete Liste mit Funktion einer doppelt verketteten Liste : Der zugehörige ListIterator kann in beiden Richtungen durch Liste navigieren Zugriff auf Element mit Index erfolgt vom Anfang oder Ende - je nachdem, was näher liegt Dient im CF auch zur Implementierung von Queues (96)
31 Java Collection Framework - Set-Implementierungen Sets lassen keine Duplikate zu. Hinzufügen Duplikat durch add() liefere false Konstruktor kann Collection übergeben werden Elemente übernommen + Duplikate eliminiert Methoden add() und addall() verwenden für Objektvergleiche deren Methode equals( ) Aufgenommene Objekte sollten equals() + hashcode() konsistent überschreiben sonst wird stets nur Identität abgewiesen - nicht aber Äquivalenz! import java.util.* ; class SetTest { public static void main( String[] args ) { Collection<Mitarbeiter> c = new HashSet<Mitarbeiter>( ) ; Aufruf add( m2 ) liefert true, wenn Klasse Mitarbeiter equals() nicht überschreibt. Dagegen false mit vorstehender equals() - Implementierung! Mitarbeiter m1 = new Mitarbeiter(4711) ; Mitarbeiter m2 = new Mitarbeiter(4711) ; boolean check1 = c.add( m1 ) ; boolean check2 = c.add( m2 ) ; Note : Übung - Warum? Great care must be exercised if mutable objects are used as set elements. The behavior of a set is not specified if the value of an object is changed in a manner that affects equals-comparisons while the object is an element in the set. (97)
32 Java Collection Framework - Set-Implementierungen HashSet<E> und TreeSet<E> Unterschiedliches Ordnungsverhalten : Objekte in HashSet müssen equals() + hashcode() überschreiben - für internen Objektvergleich. Es liegt keine Sortierung vor. Objekte in TreeSet müssen IF Comparable<T> implementieren - und somit Ordnung definieren. Objekte liegen aufsteigend geordnet. import java.util.* ; class HashSet01 { public static void main( String[] args ){ Set<String> s = new HashSet<String>( ) ; s.add( "IBM" ) ; s.add( "SAP" ) ; s.add( "Oracle" ) ; Iterator<String> it = s.iterator( ) ; while( it.hasnext() ) System.out.println( it.next() ) ; // "Chaotische" Ausgabe : SAP IBM Oracle import java.util.* ; class TreeSet01 { public static void main( String[] args ){ Set<String> s = new TreeSet<String>( ) ; s.add( "IBM" ) ; s.add( "SAP" ) ; s.add( "Oracle" ) ; Iterator<String> it = s.iterator( ) ; while( it.hasnext() ) System.out.println( it.next() ) ; // Sortierte Ausgabe : IBM Oracle SAP Alternative Konstruktoren mit Comparator-Übergabe (98)
33 Java Collection Framework - Set-Implementierungen LinkedHashSet<E> extends HashSet<E> Garantiert, dass Iterator die Elemente in der Reihenfolge zurück liefert, in der sie eingestellt wurden Intern wird dazu zusätzlich eine verkettete Liste der Set-Elemente verwaltet! Verbesserte Performance bei Iteration über alle Elemente via interner verketteter Liste Overhead zum Erstellen der zusätzlichen internen Struktur import java.util.* ; class LinkedHashSet01 { Prinzip Linked Hash Table : public static void main( String[] args ){ Set<String> s = new LinkedHashSet<String>( ) ; s.add("ibm") ; s.add("sap") ; SAP IBM s.add("oracle") ; Iterator<String> it = s.iterator(); while( it.hasnext( ) ) System.out.println( it.next( ) ) ; Oracle (start) // Ausgabe : IBM SAP Oracle (99)
34 Java Collection Framework Queues (100)
35 Java Collection Framework - Queue-Aufbau Ausschnitt AbstractQueue Queue PriorityQueue Einfügen gemäß Comparator! tail-position Deque double ended queue Deque erlaubt Queue-untypische Zugriffe durch Methoden wie offerlast() polllast() removelast() peeklast()... Symmetrisches Verhalten für Head + Tail Kann auch als Stack verwendet werden LinkedList ArrayDeque public interface Queue<E> extends Collection<E> { public boolean offer( E e ) ; // Hinzufügen Element // Exception bei leerer Queue : public E element( ) ; // Abfrage Head-Element ohne Entfernen Hinzufüge-Verhalten hängt von konkreter Implementerung ab - muss nicht Tail-Position sein.. public E remove( ) ; // Abfrage + Entfernen Head-Element // null bei leerer Queue : public E peek( ) ; // Abfrage Head-Element ohne Entfernen public E poll( ) ; // Abfrage + Entfernen Head-Element Viele weitere Spezialisierungen : Paket java.util.concurrent (101)
36 Java Collection Framework - Interfaces als Adapter Collection Ausschnitt aus Interface- / Typ-Hierachie, der von LinkedList implementiert wird List Queue Deque Interfaces als Adapter = Proxy-Pattern Klasse LinkedList implementiert alle in Interfaces geforderten Methoden Spezielles Verhalten durch Zuweisung von LinkedList-Objekt an Variable vom Typ des gewünschten Interfaces = ADT-Verhaltens LinkedList Collection c = new LinkedList( ) ; // Nur Methoden aus Collection z.vfg. List ls = new LinkedList( ) ; // Methoden + Verhalten von Liste Queue q = new LinkedList( ) ; // Methoden + Verhalten von Queue Deque dq = new LinkedList( ) ; // Methoden + Verhalten von Deque LinkedList kann je nach Anforderung vier verschiedene Rollen spielen, wovon aber jeweils nur eine gleichzeitig sinnvoll ist! Der Klient darf also nach der Wahl eines dieser Typen keinen Cast zu einem anderen Interface oder LinkedList selbst machen - da dann eine Melange aus Collection- List-Queue-Deque entsteht. (102)
37 Java Collection Framework - Queue-Implementierungen Einfüge- / Abgriffverhalten hängt von konkreter Implementierung ab : import java.util.* ; class QueueTest { public static void main( String[] args ) { Queue<Mitarbeiter> q ; q = new PriorityQueue<Mitarbeiter>( ) ; // *) for( int i=100; i>=0; i=i-10 ) q.offer( new Mitarbeiter( i ) ) ; // So nicht: for( Mitarbeiter m: q ) System.out.println( m ) ; // Sondern: Liefert Inhalt gemäß Mitarbeiter-ID: 0,10,20,... for( int i=0; i<=10; i++ ) System.out.println( q.poll( ) ) ; q = new ArrayDeque<Mitarbeiter>( ) ; for( int i=100; i>=0; i=i-10 ) q.offer(new Mitarbeiter( i ) ) ; // Liefert Inhalt gemäß FIFO: 100, 90, 80,... for( int i=0; i<=10; i++ ) System.out.println( q.poll( ) ) ; Wert von size() verändert sich durch poll() nicht im Schleifenkopf verwenden Anordnung bei PriorityQueue durch internen priority heap Direktes Iterieren liefert nicht gewünschte Prio-Folge Es muss gepollt werden Dies liefert least-first Reihenfolge gemäß Comparable-Verhalten der gespeicherten Objekte *) hier: Mitarbeiter ist Comparable! Wenn zu speichernde Objekte nicht Comparable sind, dann LZ-Exception (103)
38 Java Collection Framework - Collections sind iterable Alle Collection-Klassen implementieren generisch das Interface Iterable<T> import java.util.* ; class CollectionIteration { public static void main( String[ ] args ) { List<Mitarbeiter> ls = new ArrayList<Mitarbeiter>( ) ; ls.add( new Mitarbeiter( 13, "Hans" ) ) ; ls.add( new Mitarbeiter( 10, "Udo" ) ) ; ls.add( new Mitarbeiter( 11, "Inge" ) ) ; Iteratoren sind fail-fast : ConcurrentModificationException wenn Iterator merkt, dass seine Collection strukturell verändert wurde = Hinzufügen / Entfernen von Elementen Verhindert unkorrektes Weiterarbeiten des Iterators Iterator<Mitarbeiter> it = ls.iterator( ) ; while( it.hasnext( ) ) { Mitarbeiter m = it.next( ) ; // ls.add( new Mitarbeiter( 12, "Klaus") ) ; // Exception! for( Mitarbeiter m : ls ) System.out.println( m ) ; Einige Datenbehälter verfügen auch über Methode : Iterator<E> descendingiterator( ) liefert Reverse-Order-Iterator SnapShot-Iteratoren für spezielle Klassen wie CopyOnWriteArrayList (104)
39 Java Collection Framework Map ist kein Collection-Untertyp! Maps Assoziative Abbildungen Schlüssel-Wert-Verknüpfung / Dictionary Beispiel : Matrikelnummer = Schlüssel (einmaliger Key) Note = Wert (nicht einmaliger Value) (105)
40 Java Collection Framework - Map-Aufbau Ausschnitt AbstractMap Map key k1 k2 value v1 v2 Schlüssel (keys) sind eindeutig Sollten immutable sein! *) keys bilden ein Set! HashMap k3 v3 Zu jedem Schlüssel gehört ein Wert (value) Keys sind eindeutig - Values nicht TreeMap SortedMap Schlüssel-Wert-Semantik = Dictionary Kein Iterator - stattdessen : Weitere Spezialisierungen : NavigableMap, LinkedHashMap... Abgriff aller key-objekte als Set Abgriff aller Value-Objekte als Collection Anforderungen an Objekte : *) Note: Great care must be exercised if mutable objects are used as map keys. The behavior of a map is not specified if the value of an object is changed in a manner that affects equalscomparisons while the object is a key in the map. equals() + hashcode() implementieren! bei SortedMap zusätzlich IF Comparable! (106)
41 Java Collection Framework - IF Map public interface Map<K,V> { public V put( K key, V value) ; // Hinzufügen eines (k,v)-paares public V get( K key ) ; // Liefert Value für vorgegeben key - oder null public int size( ) ; // Anzahl der Paare Methode put() ersetzt bei bereits bestehendem key- Eintrag den alten Value durch neuen Value - und liefert alten Value zurück. public void clear( ) ; // löscht Inhalt public boolean containskey( Object k ) ; // Schlüssel k enthalten? public boolean containsvalue( Object v ) ; // Value v enthalten? public boolean isempty() ; // ist Map leer? public boolean remove( Object k ) ; // Löscht (k,v)-paar public Set<K> keyset( ) ; // liefert Set aller in Map enthaltener Key-Objekte public Collection<V> values( ) ; // liefert Collection aller in Map enthaltener Value-Objekte public void putall( Map<? extends K,? extends V> m ) ; // Hinzufügen aller Elemente der Map m public Set< Map.Entry<K,V> > entryset( ) // liefert alle (K,V)-Paare als Set, verpackt in Entry-Objekte public static interface Entry<K,V> // inneres Interface Map.Entry Collection-Views die von Orginal-Map geliefert werden "are backed by the map" An ihnen durchgeführte Veränderungen schlagen auf Orginal Map durch! (107)
42 Java Collection Framework - Map-Impl. HashMap import java.util.* ; class Registry { private HashMap<String,Object> registry = new HashMap<String, Object>( ) ; Registry-Pattern : Anwendungsbeispiel Objekte (value) können unter Namen (key) ein- und ausgetragen werden Durch Namensangabe erhält man Referenz auf registriertes Objekt public void bind( String name, Object obj ){ registry.put( name, obj ) ; public Object lookup( String name ) { Verwendung in Frameworks = Komponenten-Systeme Naming- / Lookup-Services return registry.get( name ) ; public void unbind( String name ) { registry.remove( name ) ; Konstruktoren HashMap HashMap( int initialcapacity ) HashMap( int initialcapacity, float loadfactor ) Bei Überschreiten loadfactor (= Anzahl Elemente / Anzahl Buckets) findet Rehashing statt = Kopieren in neue vergrößerte Hash-Table (108)
43 Java Collection Framework - IF SortedMap - Impl. TreeMap import java.util.* ; class TreeMapTest { public static void main( String[] args ){ SortedMap<String, String> m = new TreeMap<String, String>( ) ; m.put( "SBB", "Schweizerische Bundesbahn" ) ; IF SortedMap erweitert Map um Methoden wie firstkey(), lastkey() die auf interner Sortierung basieren m.put( "DB", "Deutsche Bahn" ) ; String s = m.put( "DB", "Deutsche Bahn AG" ) ; // s=deutsche Bahn System.out.println( m.get( "SBB" ) ) ; Anforderung konsistenter Klassen-Infrastruktur : HashMap : equals() + hashcode() Set<String> s = m.keyset( ) ; Iterator<String> it = s.iterator( ) ; while( it.hasnext( ) ) System.out.println( it.next( ) ) ; // alle keys als Set TreeMap : auch Comparable! Konstruktor von TreeMap kann Comparator übergeben werden Collection<String> c = m.values( ) ; // alle values als Collection Warum unterschiedlicher Rückgabetyp? (109)
44 Java Collection Framework Überblick - Aufbau Performance Korrekt implementierte Klassen-Infrastruktur zur Verwendung innerhalb Collection Framework (110)
45 Java Collection Framework - Aufbau Überblick Implementierung Set List Queue Deque Map Hashtable HashSet HashMap Array ArrayList ArrayDeque Baum TreeSet ProrityQueue TreeMap Verkettete Liste LinkedList LinkedList NavigableSet LinkedHashS et EnumSet NavigableMap LinkedHashMap IdentityHashMap EnumMap Thread-sichere Behälter Paket java.util.concurrent und Unterpakete Generell : Alle Implementierungen passen sich intern dynamisch an erforderliche Größe an. Alle Implementierungen haben überladenen Copy-Konstruktor - dem bereits vorhandene Collection übergeben werden kann, um deren Elemente zu übernehmen. (111)
46 Java Collection Framework - Performance Überblick M.Naftalin, P.Wadler, "Java Generics and Collections", O'Reilly, 2007 (112)
47 Java Collection Framework - Konsistente Infrastruktur class Mitarbeiter implements Cloneable, Comparable<Mitarbeiter> { private int id ; private String name ; public Mitarbeiter( int n, String nm ){ id = n ; name = nm ; public Mitarbeiter clone( ) { Mitarbeiter p = null ; try { p = (Mitarbeiter)super.clone( ) ; catch( CloneNotSupportedException e ) { return p ; public boolean equals( Object o ) { if( this==o ) return true ; if( o==null this.getclass()!=o.getclass() ) return false ; Mitarbeiter p = (Mitarbeiter) o ; return this.id == p.id ; public int hashcode() { return id ; public int compareto( Mitarbeiter p ) { return this.id - p.id ; public String tostring( ) { return id + "," + name ; //... Klassen, deren Objekte im Collection Frameworks aufgenommen werden, sollten die Java-Klassen- Infrastruktur konsistent implementieren zb. zwei Objekte, die equals sind, müssen auch gleichen hashcode liefern und bei compareto 0. alles andere führt zu Überraschungen / Fehlern Weitere Vergleichsmöglichkeiten durch zusätzliche Komparatoren Zum Versenden via Netz müssten Objekte Interface Serializable implementieren. (113)
48 Java Collection Framework java.util.collections : Algorithmen auf Collections Suchen & Sortieren Wrapper Speziell : Abgriff gespeicherter Datenelemente als Array (114)
49 Java Collection Framework - Collections-Algorithmen Statische Methoden der Klasse java.util.collections Ausschnitt Sortieren : void sort( List ls ) // Verwendung compareto( ) der Elemente void sort( List ls, Comparator cp ) // Verwendung compare( ) des Comparators cp Elemente der Liste müssen comparable sein - sonst Compiler-Fehler! Sortierkriterium : compareto( ) der Listelemente bzw. compare( ) von cp Stabiles Sortieren : Reihenfolge von Elementen wird nur wenn nötig geändert Binäre Suche in sortierter Liste : int binarysearch( List ls, E e ) int binarysearch( List ls, E e, Comparator cp ) // Angabe einer alternativen Sortierung durch cp Rückgabewert z 0 : Position des ersten Vorkommens von e Rückgabewert z < 0 : Nicht vorhanden Liste bliebe sortiert, wenn e an Position -(z+1) eingefügt würde Voraussetzung für verlässliche Resultate : Liste ist bzgl. compareto( ) bzw. cp.compare( ) aufsteigend sortiert! (115)
50 Java Collection Framework - Collections - Sortieren Beispiel : Sortieren einer List - nach mehreren Sortierkriterien Zugehörige Klasse Mitarbeiter umseitig import java.util.* ; class CollectionSort { public static void main( String[ ] args ) { List<Mitarbeiter> ls = new ArrayList<Mitarbeiter>( ) ; ls.add( new Mitarbeiter( 13, "Hans" ) ) ; Natürliche Ordnung durch compareto() erfasst ls.add( new Mitarbeiter( 10, "Udo" ) ) ; ls.add( new Mitarbeiter( 11, "Anne" ) ) ; Collections.sort( ls ) ; / / Sortieren nach compareto( ) System.out.println( ls ) ; Andere Ordnungen durch Comparator- Objekte zusätzlich zur Vfg. gestellt Collections.sort( ls, Mitarbeiter.NAME_COMP ) ; // Sortieren nach Name System.out.println( ls ) ; (116)
51 Java Collection Framework - Collections - Sortieren Sortieren einer List nach mehreren Sortierkriterien Klasse Mitarbeiter : comparabel nach persnr - und besitzt zusätzlichen Comparator Anm : Klassen können beliebig viele Comparatoren haben aber nur eine Methode compareto( ) Methoden equals() + hashcode() sollten in Einklang mit Methode compareto() arbeiten! class Mitarbeiter implements Comparable<Mitarbeiter> { public static Comparator NAME_COMP = new NameComparator( ) ; private int persnr ; private String name ; public Mitarbeiter( int persnr, String name ) { /*...*/ public String tostring( ) { /*...*/ public int compareto( Mitarbeiter m ) { return this.persnr - m.persnr ; private static class NameComparator implements Comparator<Mitarbeiter> { public int compare( Mitarbeiter m1, Mitarbeiter m2 ) { // bzgl. Name String s1 = m1.name ; String s2 = m2.name ; return s1.compareto( s2 ) ; //... (117)
52 Java Collection Framework - Collections Wrappers Statische Wrapper-Methoden liefern für bestehende Collection neue Wrapper-Objekte, die das Standard-Verhalten der Collection-Klassen verändern = Protection Proxy Pattern Reichen Methodenaufrufe an Orginal-Methoden durch - aber kontrollieren den Zugriff! Jeweils zusätzlich separate Methoden für die Haupt-Interfaces des Collection Frameworks (d.h. für : Set, List, Map, SortedSet, SortedMap) 1. Synchronized Collections <T> Collection<T> synchronizedcollection( Collection<T> c ) Liefern thread-sicheres synchronisiertes Collection-Objekt 2. Unmodifiable Collections <T> Collection<T> unmodifiablecollection( Collection<T> c ) Liefern Collection-Objekt, das bei jeder Strukturänderung UnsupportedOperationException wirft 3. Checked Collections <T> Collection<T> checkedcollection( Collection<T> c, Class<T> type ) Liefern Collection-Objekt, das bei jedem weiteren hinzugefügten Element testet, ob der vorgegebene Klassentyp eingehalten wird - auch wenn im nicht generischen Raw-Type-Coding verwendet Andernfalls wird ClassCastException geworfen (118)
53 Java Collection Framework - Abgriff Inhalte als Array Interface Collection : Object[ ] toarray( ) // kopiert Inhalt in Object-Array <T> T[ ] toarray( T[ ] t ) // kopiert Inhalt in typsicheres T[ ]-Array Collection<String> c = new LinkedList<String>( ) ; c.add("er") ; c.add("sie") ; c.add("es") ; String[ ] s1 = new String[0] ; // typisches Idiom - Länge 0 String[ ] s2 = new String[5] ; // dient wirklich zur Aufnahme // Übergebenes Array nicht groß genug // Neues exakt passendes Array typsicher angelegt + zurück geliefert : String[ ] s3 = c.<string>toarray( s1 ) ; // Übergebenes Array groß genug // In übergebenes Array typsicher kopiert + Referenz darauf zurück geliefert : Inhalte : s3 := [ er, sie, es ] s2 := [ er, sie, es, null, null ] c.<string>toarray( s2 ) ; (119)
54 Data Access Object - Pattern (DAO) Zugriff auf Datenquelle als SWE-Beispiel : Schichtenbildung + Abstraktion als typische Software-Engineering-Technik Wenn du es eilig hast dann nimm einen Umweg! Chinesisches Sprichwort Einige Abbildungen + Inhalte wurden dem Skript von Prof. Dr. Deck entnommen (124)
55 DAO Data Access Object Konkreter Datenzugriff hängt stets von Eigenarten der speziellen Datenquelle ab Relationale DB, NOSQL DB, XML, flache Datei, Herstellerabhängige SQL-Dialekte Ziel : Abstraktion + Entkopplung von Anwendungs- und Persistenzschicht Objekt-Relationales Mapping übersichtlich bewältigen Flexibilität hinsichtlich unterschiedlicher Persistenzimplementierungen komponentenbasiertes Design + modulare Entwicklung Präsentation Applikation Persistenz Menüführung Darstellung Eingabe Geschäftslogik Konsistenzprüfungen Datenaufbereitung DAO Datensicherung Datenabfrage Bsp : Verwaltung von Mitarbeitern (Objekten!) - benötigte Methoden für Datenzugriff : Anzeige einzelner Mitarbeiter CRUD Anzeige aller Mitarbeiter Neu-Anlegen eines Mitarbeiters Ändern eines Mitarbeiters Löschen eines Mitarbeiters (125)
56 DAO Java-Realisierung 1. Defintion eines DAO-Interfaces : Objektorientierte Formulierung - nicht relational und nicht DB-spezifisch! public interface MitDAO { // CRUD : public Mitarbeiter getmitbypnr( int persnr ) throws DAOException ; public List<Mitarbeiter> getallmit( ) throws DAOException ; public boolean insertmit( Mitarbeiter m ) throws DAOException ; //... Detail : Zwischenspeichern von Objekten in Liste Minimieren der DB-Zugriffe. Nicht jede DataAccess-Methode benötigt erneuten Zugriff auf echte Persistenz-Schicht! // Verallgemeinerung : Generisches DAO-IF public interface GenDAO<K,V> { public V get( K key ) ; public List<V> getall( ) ; public boolean insert( V val ) ; public boolean delete( K key ) ; public boolean update( K key, V val ) Bei Fehlersituationen spezielle Ausnahme auslösen evtl. eigene Klasse : DAOException extends Exception In Interface-Signatur Erlaubnis zum Werfen! (126)
57 DAO Java-Realisierung 2. Bereitstellen einer oder mehrerer Implementierungen : public class HSQLDBData implements MitDAO{ public class OracleData implements MitDAO{ public class FlatFileData implements MitDAO{ public class DummyData implements MitDAO{ public class EmptyData implements MitDAO { Speziell : Leere Implementierung zu Test- / Compilations-Zwecken public Mitarbeiter getmitbypnr( int pnr ) { return null ; public List<Mitarbeiter> getallmit( ) { return null ; public boolean insertmit( Mitarbeiter m ) { return true ; public boolean deletemit( int pnr ) { return true ; public boolean updatemit( int pnr, Mitarbeiter m ) { return true ; (127)
58 DAO Java-Realisierung 3. Anwendungsseitig Programmierung nur gegen das Interface : public static void main( String[ ] args ) { MitDAO data = new HSQLDBData( ) ; // * oder andere Impl.! //... private void alleanzeigen( ) { // Verwendung Interface-Typ data List<Mitarbeiter> mitlist = data.getallmit( ) ; //... an Oberfläche anzeigen private void loeschen( ) { int persnr ; // durch Anwendung persnr ermitteln data.deletemit( persnr ) ; private void neu( ) { // Mitarbeiterwerte ermitteln int persnr =... String name =... data.insertmit( new Mitarbeiter( persnr, name ) ) ; //... Konkrete Implementierung tritt nur an einer Stelle * in Erscheinung! Von konkreter Implementierung wird somit abstrahiert austauschbar! Rest der Anwendung bleibt völlig unverändert - auch wenn in * andere Implementierung eingesetzt wird. Abstraktion und Entkopplung von Anwendungs- und Persistenzschicht Flexibilität für unterschiedliche Persistenzimplementierungen. Reduktion Wartungsaufwand! Steigerung Wiederverwendbarkeit! Stärkung Modularität! Reduktion Komplexität! (128)
59 DAO Java-Realisierung - Vorteile Unterstützt modulare komponentenbasierte Entwicklung - Präsentation ( View ) - Applikation ( Model + Controller ) - Persistenzschicht Frühzeitiges Testen von Präsentation + Anwendung - auch ohne DB-Anschluss - leere DAO-Implementierung zum Compilieren + rudimentäre Ablauftests - temporäre Implementierung zum fast vollständigen Test der Anwendung Austausch der Implementierungen - Unterstützung unterschiedlicher RDBMS - Sauberes Objekt-Relationales Mapping - Unterstützung verschiedener Persistenz- und Datenbankmodelle Präsentation Applikation Persistenz persnr =... name =... Mitarbeiter m = new Mitarbeiter( p, name ) DAO data.insert(m) OK INSERT INTO MITARBEITER VALUES (129)
60 DAO Temporäre Ersatz-Realisierung Mock-Objekt class TempData implements MitDAO { private List<Mitarbeiter> mitliste ; public TempData( ) { // erzeugt Einträge mitliste = new ArrayList<Mitarbeiter>( ) ; mitliste.add( new Mitarbeiter( 2, "Hans" ) ) ; mitliste.add( new Mitarbeiter( 4, "Inge" ) ) ; public List<Mitarbeiter> getallmit( ) { return mitliste ; public Mitarbeiter getmitbypnr( int p ) { for( Mitarbeiter m : mitliste ) if( m.getpersnr() == p ) return m ; return null ; public boolean insertmit( Mitarbeiter m ) { if( mitliste.contains( m ) ) return false ; mitliste.add( m ) ; return true ; //... weitere Methoden Objekte werden in Liste verwaltet, aufgenommen, gelöscht, geändert Volle Funktionalität - solange Programm läuft Keine echte Persistenz Aber funktionsfähig - z.b. für Applikationstests Echte DB wird nicht "verschmutzt" Dummy-Objekt : Leere Implementierung der Schnittstelle ohne jede Funktionalität Mock-Objekt : Minimale Implementierung der Schnittstelle - oft mit konstanten Werten - aber ohne echte Persistenz (130)
61 DAO Echte JDBC-Realisierung class HSQLDBData implements MitDAO { private static String driver = "..." ; private static String url = "..." ; public HSQLDBData( ) { Class.forName( driver ) ; noch ohne Exception-Handling public List<Mitarbeiter> getallmit( ) { Connection con = DriverManager.getConnection( url ) ; List<Mitarbeiter> list = new LinkedList<Mitarbeiter>( ) ; Statement st = con.createstatement( ) ; ResultSet rs = st.executequery( "SELECT * FROM MITARBEITER" ) ; while( rs.next( ) ){ int persnr = rs.getint( "PERSNR" ) ; String name = rs.getstring( "NAME" ) ; Mitarbeiter m = new Mitarbeiter( persnr, name ) ; list.add( m ) ; if( con!=null ) { con.close( ) ; rs.close( ) ; st.close( ) ; return list ; //... weitere analog zu implementierende IF-Methoden... Objekt-Relationales- Mapping ORM Umsetzung relationales Modell in Java-Objekte Passiert in DAO-Implementierung Belastet nicht zentrales / restliches Applikations-Coding! (131)
62 DAO Realisierung in Java Minimieren der DB-Zugriffe Nicht jede DataAccess-Methode benötigt erneuten Zugriff auf Persistenz-Schicht Zwischenspeichern von Objekten in Liste, die von Applikationsschicht gehalten wird Präsentation anzeige() Applikation List<Mitarbeiter> list getallmit() Persistenz Details egal anzeige() andere Sortierung sort( list ) details(pnr) DAO aber konform zu Interface MitDAO neu() insertmit() Auch bei Verwendung einer echten DB macht DAO-Zwischenschicht mit ihren temporären Datenbehältern somit als Cache / Puffer / InMemory-Element Sinn (132)
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
Mehr12 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
MehrJAVA 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)
MehrKapitel 12: Java Collection Teil II
Kapitel 12: Java Collection Teil II Übersicht Set und TreeSet Map und TreeMap 12-1 In diesem Kapitel Iterable Interface Klasse extends implements Collection Queue List Set Map Deque
MehrJava 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]...
MehrNü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
Mehrjava.util. Sebastian Draack Department Informations- und Elektrotechnik Department Informations- und Elektrotechnik JAVA Collection-API
Sebastian java.util.* Draack JAVA Collection-API 1 Collection-API Begriffe Einleitung, Motivation Iterator Comparator Interfaces Abstrakte Klassen Konkrete Klassen Utility-Klassen Beispiele Zusammenfassung
MehrEinstieg in die Informatik mit Java
1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung
MehrKapitel 7: Java Collection Teil I
Kapitel 7: Java Collection Teil I! Übersicht! Bemerkungen! Collection! List! LinkedList und ArrayList! Queue und Deque! ArrayDeque Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik II Java Collection
MehrSchein-/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
MehrProgrammierkurs 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
MehrEinfü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
MehrInfo 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
MehrProgrammierkurs 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
MehrEinfü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
MehrAbstrakte Datentypen und Java
Abstrakte Datentypen und Java ƒ hehueolfn ƒ 5HDOLVLHUXQJYRQ$'7 NRQNUHWH'DWHQW\SHQ %HLVSLHO5DWLRQDOH=DKO ƒ 3DUDPHWULVLHUWH'DWHQW\SHQ %HLVSLHO)HOG6RUWLHUWHV)HOG ƒ 6FKQLWWVWHOOHQNRQ]HSW ƒ :LFKWLJH'DWHQW\SHQLQ-DYD
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 4 ArrayList, PriorityQueue, HashSet und HashMap
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 4 ArrayList, PriorityQueue, HashSet und HashMap Array List Dynamisches Array ArrayList vertritt ein Array mit variabler Länge Kapazität passt sich automatisch
MehrProgrammieren 2 16 Java Collections und Generizität
Programmieren 2 16 Java Collections und Generizität Bachelor Medieninformatik Wintersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Faulheit professionell: Fertige Datenbehälter
MehrProgrammieren in Java
Datenstrukturen 2 Gruppierung von Daten Datentypen, die eine Menge an Daten gruppieren und auf dieser Gruppierung eine gewisse Logik bereitstellen werden Datenstrukturen genannt Bisher wurde zur Gruppierung
MehrCollections. Datamining und Sequenzanalyse. Marvin Meusel, Bertram Vogel
Collections Datamining und Sequenzanalyse Marvin Meusel, Bertram Vogel Arrays Arrays Arrays erzeugen int[] arr1 = new int[3] int[] arr2 = {1,2,3 Falls möglich primitive Datentypen verwenden int[] arr1
MehrÜbungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit
Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Aufgabe : Die allgemeine Object-Liste Gegeben sei folgendes UML-Klassendiagramm: MyObjectList
MehrProblem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe
Maximale Größe?! Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um Dynamische Anpassung der Größe Praktische Informatik I, HWS 2009, Kapitel 10 Seite
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrObjektorientierte Implementierung
Objektorientierte Implementierung 10) Verfeinern von Assoziationen mit dem Java-2 Collection Framework Softwaretechnologie, Prof. Uwe Aßmann, Prof. Heinrich Hussmann 1 Objektorientierte Implementierung
Mehrequals 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
MehrVom objektorientierten Entwurf zur Implementierung in Java. 2. Dezember 2014
Vom objektorientierten Entwurf zur Implementierung in Java 2. Dezember 2014 Überblick Verwendung von Frameworks und Bibliotheken Was enthält die Java Standard Edition? Implementieren mit dem Java Collections
MehrADT: 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,
MehrLiteraturverzeichnis. Literaturverzeichnis 245
Literaturverzeichnis 245 Literaturverzeichnis 1. Gosling, J., Joy, B., Steele, G., Bracha, G.: The Java Language Specification, 3rd edn. The Java Series. Prentice Hall (2005) 2. Oracle: Java Platform,
MehrTeil V. Generics und Kollektionen in Java
Teil V Generics und Überblick 1 Parametrisierbare Datenstrukturen in Java 2 Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 1 Parametrisierbare Datenstrukturen in Java Motivation für
MehrJava 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
MehrWo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 338
Wo sind wir? Java-Umgebung Lexikale Konventionen Datentypen Kontrollstrukturen Ausdrücke Klassen, Pakete, Schnittstellen JVM Exceptions Java Klassenbibliotheken Ein-/Ausgabe Collections Threads Applets,
MehrGrundkonzepte java.util.list
Grundkonzepte java.util.list Eine List ist eine Spezialisierung einer allgemeinen Ansammlung (Collection): Lineare Ordnung ist definiert Zugriff über Rang oder Position Volle Kontrolle wo eingefügt bzw.
MehrCollections. Arthur Zaczek. Nov 2015
Arthur Zaczek Nov 2015 1 Collections 1.1 Definition Anhäufung von Objekten Werte können hinzugefügt, gesucht und gelöscht werden Implementierung mit verschiedenen Algorithmen, je nach Nutzung 1.2 Grundlegende
MehrHeute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.
Heute Nachbetrachtung Wissensüberprüfung Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.2015 IT I - VO 9 1 Organisatorisches Zwischentest findet am 16.12. von 17:30 bis
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Was gefällt Ihnen? Sehr ausführliches Skript Fragen / Aufgaben in der Vorlesung Praktische Beispiele Tolle Aufgabenblätter
MehrJava 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
MehrVorlesung Programmieren
Vorlesung Programmieren Java Generics und Java API Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer Programme verarbeiten Daten Häufig
MehrWie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?
Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen
MehrJava I Vorlesung Collections
Java I Vorlesung 5 Collections 24.5.2004 Abstrakte Klassen und Interfaces Arrays Java Collections Framework Abstrakte Klassen: Motivation Häufig will man eine Klasse schreiben, die nur als Basisklasse
MehrProgrammiertechnik II
Datentypen in Java Primitive Typen in Java Wertesemantik (keine Referenzsemantik) Vordefinierte Hüllklassen (etwa java.lang.float) Integrale Typen: char, byte, short, int, long Gleitkommatypen: float,
MehrGrundlagen der Informatik Generische Klassen
Grundlagen der Informatik Generische Klassen Generische Klassen, das Java-Collection-Framework und mehr Generische Programmierung Beobachtung: In vielen Problemstellungen hängt der grundsätzliche Aufbau
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE38-Generics (Stand 28.09.2012) Aufgabe 1: Schauen Sie sich die generischen Klassen des Paketes java.util an. Aufgabe 2: Ausgangslage sind die folgenden
MehrALP II Dynamische Datenmengen Datenabstraktion
ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen
Mehr1 Abstrakte Klassen, finale Klassen und Interfaces
1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrJava I Vorlesung 6 Referenz-Datentypen
Java I Vorlesung 6 Referenz-Datentypen 7.6.2004 Referenzen this, super und null Typkonvertierung von Referenztypen Finale Methoden und Klassen Datentypen in Java In Java gibt es zwei Arten von Datentypen:
MehrProgrammiermethodik 3. Klausur Lösung
Programmiermethodik 3. Klausur Lösung 9. 1. 2014 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 20 2 16 3 45 4 19 5 20 Gesamt 120 1 Seite 2 von 10 Aufgabe 1) Objekt-Orientierung und Vererbung
Mehr4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)
4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 8./15. November 2005 Einordnung
MehrALP II Dynamische Datenmengen
ALP II Dynamische Datenmengen Teil III Iteratoren Iterator-Objekt O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 22. ALP2-Vorlesung, M. Esponda 2 Motivation: Iteratoren Wir haben für die Implementierung
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen
5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden
MehrVorlesung 09: Mengen. Peter Thiemann SS 2010
Vorlesung 09: Mengen Peter Thiemann Universität Freiburg, Germany SS 2010 Peter Thiemann (Univ. Freiburg) JAVA 1 / 43 Inhalt Mengen HashSet LinkedHashSet CopyOnWriteArraySet EnumSet SortedSet NavigableSet
MehrProgrammieren in Java
Datenstrukturen 2 Was bisher geschah Bisher wurden zur Gruppierung von Daten immer Arrays genutzt Bis auf die Index-Funktion gibt es allerdings keinerlei logischer Operationen, mit denen der Array manipuliert
MehrGrundlagen der Informatik 0
Technische Universität Darmstadt 01.07.2013 Grundlagen der Informatik 0 Vorlesung 0 Java ist eine Programmiersprache Ilkay Baytekin Douglas Crockford http://media.smashingmagazine.com/wp-content/uploads/2012/04/doug-crockford-image.jpg
MehrStacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012
, Queues & Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 19. September 2012 ODE/FHTBM, Queues & 19. September 2012 1/42 Datenstrukturen Elementare Datenstrukturen
MehrSchnittstellen, Stack und Queue
Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In
MehrTeil VII. Hashverfahren
Teil VII Hashverfahren Überblick 1 Hashverfahren: Prinzip 2 Hashfunktionen 3 Kollisionsstrategien 4 Aufwand 5 Hashen in Java Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 7 1 Hashverfahren:
MehrInformatik II Übung 06. Benjamin Hepp 5 April 2017
Informatik II Übung 06 Benjamin Hepp benjamin.hepp@inf.ethz.ch 5 April 2017 Nachbesprechung U5 5 April 2017 Informatik II - Übung 01 2 Nachbesprechung U5 1. Einfach verkettete Listen Keine Probleme 2.
Mehr3. Übungsbesprechung Programmkonstruktion
3. Übungsbesprechung Programmkonstruktion Karl Gmeiner karl@complang.tuwien.ac.at December 12, 2011 K Gmeiner (karl@complang.tuwien.ac.at) 3. Übungsbesprechung PK December 12, 2011 1 / 13 Rückblick und
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt!! 24.03.2014 ORGANISATORISCHES 09:00-10:30! Täglich Übungen zur Vertiefung! Laptop hier nicht erforderlich! Linux, OS X! Freitag: http://hhu-fscs.de/linux-install-party/
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Kürzeste Wege, Heaps, Hashing Heute: Kürzeste Wege: Dijkstra Heaps: Binäre Min-Heaps Hashing:
MehrVerkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces
Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen
Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.
Mehrpublic interface Stack<E> { public void push(e e); public E pop();
ADS Zusammenfassung René Bernhardsgrütter 02.04.2012 1 Generics Gewähren Typsicherheit und können für verschiedene Datentypen ohne Casts verwendet werden. Beim Erstellen der Klasse werden Platzhalter für
MehrKapitel 5: Interfaces
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 5: Interfaces Folie 82 : Einleitung Betrachtet man die Programmierleistung für ein Produkt über einen längeren Zeitraum,
Mehr7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen
7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen
MehrWeitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax
Weitere Beispiele Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts public interface Funktion { boolean istimdefbereich(double x); double wert(double x); String gibbeschreibung(); public interface
MehrC# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue
C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections Leibniz Universität IT Services Anja Aue Arrays... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte
MehrProgrammieren in Java
Datenstrukturen 2 Was bisher geschah Bisher wurden zur Gruppierung von Daten immer Arrays genutzt Bis auf die Index-Funktion gibt es allerdings keinerlei logischer Operationen, mit denen der Array manipuliert
MehrGliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen
Gliederung 5. Compiler 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume
MehrLineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]
Teil II: Datenstrukturen Datenstrukturen Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T] Nichtlineare Datenstrukturen: Bäume Modell(e): spezielle
MehrProgrammieren 2 Java Überblick
Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10
MehrVorlesung Programmieren
Vorlesung Programmieren 12 Java API Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrSoftwaretechnik WS 16/17. Übungsblatt 01
Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and
MehrALP II Dynamische Datenmengen Datenabstraktion (Teil 2)
ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten
MehrCollections des Typs Set. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 09: Collections 3. Collections des Typs Set.
Universität Osnabrück 1 3 - Objektorientierte Programmierung in Java Vorlesung 09: Collections 3 Eigenschaften Eine Collection vom Typ Set ist die Java- Repräsentation einer mathematischen Menge. Sie enthält
MehrProgrammiermethodik 1. Klausur
Programmiermethodik 1. Klausur 27. 6. 2013 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 21 2 20 3 19 4 19 5 21 6 20 Gesamt 120 1 Seite 2 von 18 Aufgabe 1) Objekt-Orientierung und Vererbung
MehrAlgorithmen und Programmierung II
Algorithmen und Programmierung II Abstrakte Klassen, Schnittstellen und ADT Prof. Dr. Margarita Esponda SS 2012 1 Interfaces In Java sind Interfaces sowohl ein Abstraktionsmittel (zum Verbergen von Details
MehrProgrammieren I. Kapitel 13. Listen
Programmieren I Kapitel 13. Listen Kapitel 13: Listen Ziel: eigene Datenstrukturen erstellen können und eine wichtige vordefinierte Datenstruktur( familie) kennenlernen zusammengehörige Elemente zusammenfassen
MehrProgrammieren in Java -Eingangstest-
Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit
MehrAlgorithmen und Datenstrukturen in Java. 2007 Jiri Spale, Algorithmen und Datenstrukturen in Java 1
Algorithmen und Datenstrukturen in Java 2007 Jiri Spale, Algorithmen und Datenstrukturen in Java 1 Enumeratoren und Iteratoren Daten üblich gespeichert in: - Arrays, verketteten Listen, Bäumen, Geläufige
MehrSchwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
MehrObjektorientierte Programmierung. Kapitel 14: Interfaces
14. Interfaces 1/26 Objektorientierte Programmierung Kapitel 14: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/ brass/oop13/
MehrEinfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).
Programmieren I Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 / 64 2 / 64 Motivation Hauptteil dieser Vorlesung sind die so genannten. Zur Motivation (und als Vorbereitung der Datencontainer-Klassen
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList
MehrProf. Dr. Uwe Schmidt. 30. Januar 2017
Prof. Dr. Uwe Schmidt 30. Januar 2017 Aufgaben zur Klausur Algorithmen und Datenstrukturen im WS 2016/17 ( B Inf, B TInf, B MInf, B CGT, B WInf, B Ecom, B ITE) Zeit: 75 Minuten erlaubte Hilfsmittel: keine
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt 24.03.2014 ORGANISATORISCHES tobias.witt@hhu.de 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber später in den Übungen!
MehrProgrammieren II. Hierarchie von Collections. Vorlesung 3. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2010
Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 22 Collections und Iteratoren ListIterator Sets 2 / 22 Hierarchie von Collections Die sequenziellen Container (ArrayList
MehrInstitut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
MehrBeispiel: DB-Mock (1/7)
Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 14: Generics Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Generische Klassen (Generics) Motivation Java Typ-Prüfung Warum also Generics? Generische
MehrAlgorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte
Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Übersicht Liste und InsertionSort für e für Objekte beliebiger Klassen für Objekte von Klassen, die ein(e) Nutzer(in) festlegen kann
Mehr4.4.9 Das Java Collection Framework
4.4.9 Das Java Collection Framework eine Sammlung von Interfaces, die die Organisation von Objekten in Container unterstützt Spezifikation von Methoden zur Unterstützung der Erstellung von Collections
MehrObjektsammlungen. Programmieren 2. Konzepte (Wiederholung vom Dienstag)
Vgl. Kapitel 4 im BlueJ-Buch. Bis Kapitel 6 bleiben wir weiter dicht am BlueJ-Buch, das somit die eigentliche Referenz bildet. Objektsammlungen Andreas Zeller 1 Programmieren 2 Andreas Zeller 2 Konzepte
MehrNeuere Sprachelemente in Java
Softwaretechnik 1 Vorlesung Neuere Sprachelemente in Java Prof. Dr. Bernhard Rumpe Technische Universität Braunschweig http://www.sse.cs.tu-bs.de/ Seite 2 Neuerungen seit Java 5.0 Java Spracherweiterungen
MehrWiederholung aus SWE2
Wiederholung aus SWE2 Innere Klassen Diverse neue Sprachfeatures bei Java 1.5 Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Inhalt Innere Klassen Diverse neue Sprachfeatures bei Java 1.5 Pratikum
MehrPersistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)
Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) O/R Mapping - Objekte (Attribute) - 1:1, 1:n, n:m Beziehungen - Vererbungen (- Interfaces)
MehrADT: Verkettete Listen
ADT: Verkettete Listen Abstrakter typ - Definition public class Bruch int zaehler, nenner; public Bruch(int zaehler, int nenner) this.zaehler = zaehler; this.nenner = nenner; Konstruktor zum Initialisieren
Mehr