> Datenstrukturen in Java (Teil 2)

Größe: px
Ab Seite anzeigen:

Download "> Datenstrukturen in Java (Teil 2)"

Transkript

1 Datenstrukturen > Datenstrukturen in (Teil 2) Mark Egloff

2 Lernziel Heute Abend > Sie lernen verschieden Datenstrukturen und Ihre Bedeutung kennen z.b. Arrays, Listen, Bäume, Maps > Sie kennen die Unterschiede und wissen wann welche Datenstruktur vorteilhaft eingesetzt werden sollte > Sie können eigene Datenstrukturen erstellen, diese sortieren und entsprechend bearbeiten Mark Egloff

3 Datenstrukturen in (Teil 2) Übersicht Datenstrukturen > Arrays Mehrdimensionale Felder um Werte oder Objekte in einer festen Reihenfolge aufzunehmen. Die maximale Grösse ist festgelegt > Liste Die Liste ist eine Datenstruktur zur dynamischen Speicherung von beliebig vielen Objekten. Objekte werden dabei einer Reihe nach abgelegt > Maps (Hashtabellen) Maps sind Indexstrukturen (oder Assoziativspeicher), die die Elemente anhand eines Indexes oder Schlüssels verwalten > Bäume ( nächsten Abend ) Mehrere Elemente können auf andere Elmente verweisen. So entstehen Verknüpfungen und es können Bäume realisiert werden Mark Egloff

4 Datenstrukturen in (Teil 2) Collections - Dynamische Datenstrukturen (1/2) > Bis jetzt haben wir Arrays kennen gelernt, die eine fixe Grösse haben. Nun möchten wir uns mehr mit dynamischen Datenstrukturen befassen. > Dynamische Datenstrukturen passen ihre Größe der Anzahl der Daten an, die sie aufnehmen. Dynamische Strukturen haben aber den Nachteil, dass zur Laufzeit Speicher angefordert und verwaltet werden muss, wenn Daten eingefügt werden. > Dieses Problem wurde mittlerweile von der Informatik erkannt, und der Trend geht wieder hin zu festen, nicht dynamischen Datenstrukturen vorwiegend Arrays, natürlich nur dort, wo dies auch möglich ist. > Eine der grössten Neuerungen, die die -2-Plattform eingeführt hat, ist die so genannte Collection-API. Ein Container als Objekt, welches wiederum Objekte aufnimmt und die Verwaltung der Elemente übernimmt. Mark Egloff

5 Datenstrukturen in (Teil 2) Collections - Dynamische Datenstrukturen (2/2) > In findet man alle Arten von dynamischen Datenstrukturen im Package java.util. Dort ist das Collection-API untergebracht. > Als zentrale Basis des API s dienen die Interfaces java.util.collection und java.util.map > Es existiert eine Hilfsklasse java.util.collections ähnlich wie bei den Arrays, die noch zusätzliche Unterstützungen anbietet ablegen holen Objekte Collection Mark Egloff

6 Datenstrukturen in (Teil 2) Das Basis- Interface java.util.collection (1/3) > Collection bildet die generelle Basis, die fast alle Datenstrukturen implementiert (bis auf die Assoziativspeicher: Arrays und Maps) > Listen sowie Set s basieren auf diesem einfachem Interface. Durch die Schnittstelle Collection erhalten alle Klassen einen gemeinsamen, äusseren Rahmen > Dadurch lassen sich Implementationen und ihre Algorithmen einfach austauschen um die jeweiligen Anforderungen abzudecken > Das Interface bietet Grund-Operationen für z.b. für Elemente hinzufügen, löschen, selektieren und finden Mark Egloff

7 Datenstrukturen in (Teil 2) Das Basis- Interface java.util.collection (2/4) <<interface>> Collection <<interface>> Set <<interface>> List <<interface>> SortedSet ArrayList LinkedList Vector HashSet LinkedHashSet TreeSet Stack Mark Egloff

8 Datenstrukturen in (Teil 2) Das Basis- Interface java.util.collection (3/4) z.b. Nutzung des Interfaces Collection mit versch. Implementationen import java.util.*;... Collection col = new LinkedList(); col.add("head"); col.add("first"); col.add(""); for(iterator it = col.iterator(); it.hasnext(); ) System.out.print( it.next() + " "); Ausgabe: Head first dieselbe Reihenfolge wie eingefügt Mark Egloff

9 Datenstrukturen in (Teil 2) Das Basis- Interface java.util.collection (4/4) z.b. Nutzung des Interfaces Collection mit versch. Implementationen import java.util.*;... Collection col = new TreeSet(); col.add("head"); col.add("first"); col.add(""); Einfacher Austausch der Implementation, Rest bleibt gleich, jedoch anderes Verhalten for(iterator it = col.iterator(); it.hasnext(); ) System.out.print( it.next() + " "); Ausgabe: Head first sortierte Reihenfolge Mark Egloff

10 Datenstrukturen in (Teil 2) Auswahl der richtigen Collection- Klasse Zugriff ohne Schlüssel? Zugriff über Schlüssel keine Dupplikate? Duplikate erlaubt << Map >> << Set >> << List >> Opt. Zugriff? Sortiertes Iterieren Opt. Zugriff? Einfügen nur am Kopf threadsafe Opt. Zugriff?? single thread Sortiertes Iterieren HashSet TreeSet LinkedList HashTable HashMap TreeMap singlethread? threadsafe ArrayList Vector Stack Mark Egloff

11 Datenstrukturen in (Teil 2) > Listen in Mark Egloff

12 Datenstrukturen in (Teil 2) Listen > Die Liste ist eine Datenstruktur zur dynamischen Speicherung von beliebig vielen Objekten. > Dabei beinhaltet jedes Listenelement als Besonderheit einen Verweis auf das nächste Element, wodurch die Gesamtheit der Objekte zu einer Verkettung von Objekten wird. Listen sind somit stets linear. Mark Egloff

13 Datenstrukturen in (Teil 2) Listen Vorteile/Nachteile gegenüber Arrays > Vorteil: Listen können beliebige Anzahl von Objekten aufnehmen bzw. verknüpfen. Sie müssen nicht auf eine bestimmte Grösse initialisiert werden. Neue Objekte können einfach am Ende angehängt werden. Speicher wird effizienter genutzt, keine leere, vorreservierte Plätze Beliebige Grösse > Nachteil: Es ist nur möglich vom einen zum nächsten Objekt in der Liste zu navigieren. Suchen nach Objekten ist aufwendig Einfügen /Entfernen von Objekten mitten in der Liste benötigt zusätzliche Logik um die Objekte wieder miteinander zu Verknüpfen. nur sequentieller Zugriff, macht es langsam zusätzlicher Verwaltungsaufwand Overhead um ein Objekt zu speichern, benötigt zusätzlicher Speicher Mark Egloff

14 Datenstrukturen in (Teil 2) Listen Beispiel einer einfachen Liste (1/2) > Der folgende einfache Code zeigt wie ein Listenelement abgebildet werden könnte. Natürlich müssen Listen in nicht selber implementiert werden 1 DATA next 2 DATA next 3 DATA null Listenelement 1 Listenelement 2 Listenelement 3 class ListenElement { int index; Object data; ListenElement next } ListenElement index data next next Mark Egloff

15 Datenstrukturen in (Teil 2) Listen Beispiel einer einfachen Liste (2/2) ListenElment l1 = new ListenElement(1, "Alpha"); ListenElment l2 = new ListenElement(2, "Beta"); ListenElment l3 = new ListenElement(3, "Gamma"); l1.next = l2; l2.next = l3; 1 Alpha next 2 Beta next 3 Gamma null Listenelement 1 Listenelement 2 Listenelement 3 Mark Egloff

16 Datenstrukturen in (Teil 2) Listen Übersicht verschiedener Implementationen > java.util.arraylist Liste auf der Basis eines Arrays. Der interne Array wird bei Bedarf automatisch vergrössert. Ist nicht threadsafe. > java.util.linkedlist Bildet eine verknüpfte Liste (ohne Array). Ist nicht threadsafe. > java.util.vector Liste auf der Basis eines Arrays. Der interne Array wird bei Bedarf automatisch vergrössert. Ist threadsafe. > java.util.stack Basiert auf Vector, bildet eine last-in-first-out (LIFO) Liste. Ist threadsafe. Mark Egloff

17 Datenstrukturen in (Teil 2) Listen Übersicht verschiedener Implementationen interface Collection interface List AbstractList Cloneable java.io.serializable ArrayList AbstractSequentialList Cloneable java.io.serializable LinkedList AbstractList Cloneable java.io.serializable Vector Stack Mark Egloff

18 Datenstrukturen in (Teil 2) Listen Auszug aus dem Interface java.util.list Collection interf ace List +size:int +contains:boolean +iterator:iterator +toarray:object[] +toarray:object[] +add:boolean +remove:boolean +containsall:boolean +addall:boolean +addall:boolean +removeall:boolean +retainall:boolean +clear:void +equals:boolean +hashcode:int +get:object +set:object +add:void +remove:object +indexof:int +lastindexof:int +listiterator:listiterator +listiterator:listiterator +sublist:list public interface List extends Collection { int size(); boolean add(object o); void add(int index, Object o); boolean remove(object o); Object remove(int index); Object get(int index); boolean set(int index); boolean removeall(collection c); void clear(); Iterator iterator();... } Der spezieller Unterschied gegenüber Collection ist, dass man über einen Index auf die Elemente zugreifen kann Mark Egloff

19 Datenstrukturen in (Teil 2) Listen Beispiel Vector import java.util.*; class Run { public static void main(string[] args) { List l = new Vector(); Kreis k = new Kreis(2.5f); l.add(k); k = (Kreis) l.get(0); Instanzierung Hinzufügen Lesen } k = (Kreis) l.get(1); // Laufzeitfehler } // IndexOutOfBoundsExcpetion Mark Egloff

20 Datenstrukturen in (Teil 2) Listen Beispiel Stack import java.util.*; class Run { public static void main(string[] args) { Stack s = new Stack(); } } s.push("head"); s.push("first"); s.push(""); System.out.println( s.pop() ); System.out.println( s.pop() ); // // first Mark Egloff

21 Datenstrukturen in (Teil 2) Listen Performance verschiedener Implementationen Class Elemente Add Iterate Remove LinkedList ms 3.06 ms 0.07 ms ms ms 8.2 ms ArrayList ms 5.24 ms 0.71 ms Vector (threadsafe) ms ms ms ms 5.49 ms 0.71 ms ms ms ms Nach 10 Durchläufen mit JRE 1.5, 2GHz Pentium M, 1GB RAM Die Wahl der richtigen Listen - Implementation ist entscheidend für die Performance Gewisse Listen lassen ein Fine-Tuning zu, um das Resizing-Verhalten zu optimieren (initialcapacity, capacityincrement) Mark Egloff

22 Datenstrukturen in (Teil 2) Listen Performance verschiedener Implementationen Mark Egloff

23 Datenstrukturen in (Teil 2) Listen Performance verschiedener Implementationen Mark Egloff

24 Datenstrukturen in (Teil 2) > Set s in Mark Egloff

25 Datenstrukturen in (Teil 2) Set s > Sets oder auch Mengen genannt sind eine spezielle Form von Listen, welche das gleiche Element nur einmal aufnehmen. Diese Art von Strukturen eignen sich bestens um eindeutige Werte aufzunehmen > Set s sind im allgemeinen langsamer als Listen, da sie zusätzlich eine Logik besitzen um die Eindeutigkeit sicherzustellen. Man unterscheidet zwischen geordneten (sortierten) sowie ungeordneten Set s > In bildet die Basis das Interface java.util.set bzw. java.util.sortedset ablegen Objekt holen equals() equals() equals() equals() equals() Mark Egloff

26 Datenstrukturen in (Teil 2) Set s Übersicht verschiedener Implementationen > java.util.hashset Schnelle Implementierung durch Hashing-Verfahren (HashMap). Ist nichtthreadsafe > java.util.treeset Mittels Binärbäume realisiert, die eine Sortierung ermöglichen. Ist nichtthreadsafe > java.util.linkedhashset Schnelle Mengenimplementierung unter Beibehaltung der Einfügereihenfolge. Ist nicht- threadsafe > java.util.enumset (seit 1.5). Eine spezielle Menge ausschließlich für Enum-Objekte. Ist nicht- threadsafe > java.util.concurrent.copyonwritearrayset (seit 1.5) Schnelle Datenstruktur eignet sich für viele lesende Zugriffe Ist threadsafe Mark Egloff

27 Datenstrukturen in (Teil 2) Set s Übersicht verschiedener Implementationen interf ace java.util.collectio Collection interf ace java.util.set interf ace java.util.sortedse Cloneable java.io.serializable j av a.util.treese Cloneable java.io.serializable j av a.util.hashse AbstractCollection java.util.abstractse Mark Egloff

28 Datenstrukturen in (Teil 2) Set s Auszug aus dem Interface java.util.set Collection interf ace java.util.set +size:int +contains:boolean +iterator:iterator +toarray:object[] +toarray:object[] +add:boolean +remove:boolean +containsall:boolean +addall:boolean +retainall:boolean +removeall:boolean +clear:void +equals:boolean +hashcode:int public interface Set extends Collection { int size(); boolean add(object o); boolean remove(object o); boolean removeall(collection c); void clear(); Iterator iterator(); // Enumeration... } Mark Egloff

29 Datenstrukturen in (Teil 2) Set s Beispiel mit HashSet import java.util.*; public class Run { public static void main(string args[]) { Set set = new HashSet(); set.add("bernadine"); set.add("elizabeth"); set.add("gene"); set.add("elizabeth"); Instanzierung Hinzufügen (Elizabeth 2x) } } System.out.println( set ) Ausgabe: [Gene, Bernadine, Elizabeth] unsortierte, zufällige Reihenfolge Mark Egloff

30 Datenstrukturen in (Teil 2) Set s Beispiel mit TreeSet import java.util.*; public class Run { public static void main(string args[]) { Set set = new TreeSet(); set.add("bernadine"); set.add("elizabeth"); set.add("gene"); set.add("elizabeth"); Instanzierung Hinzufügen (Elizabeth 2x) } } System.out.println( set ) Ausgabe: [Bernadine, Elizabeth, Gene] sortierte Reihenfolge Mark Egloff

31 Datenstrukturen in (Teil 2) Set s Funktionsweise von HashSet & TreeSet > java.util.hashset HashSet verwendet intern die java.util.hashmap. Es wird beim Einfügen vom jeweiligen Objekt ein eindeutiger Wert (Identifikationsnummer, Hash) berechnet. Hierzu wird vom Objekt die Methode hashcode() aufgerufen (vererbt von java.lang.object ). Diese muss für eigene Objekte überschrieben werden. > java.util.treeset Verwendet intern für die Sortierung das Interface java.lang.comparable. Das jeweilige Objekt muss dieses Interface unterstützen, ansonsten wird eine ClassCastException ausgelöst. Bei Objekten eigener Klassen muss dieses Interface implementiert werden. Mark Egloff

32 Datenstrukturen in (Teil 2) > Iteratoren in Mark Egloff

33 Datenstrukturen in (Teil 2) Iteration - Mit einem Iterator durch die Daten wandern > Um über generische und dynamische Datenstrukturen zu wandern wurde in der Informatik ein spezielles Design geschaffen das Iterator -Pattern. > Der Iterator (oder Cursor ) ist dabei ein Zeiger, mit dem über die Elemente einer Liste bzw. durch die Elemente iteriert werden kann. > Er verweist nur auf das aktuelle Objekt in einer Collection und kann mit entsprechenden Operationen auf das nächste Objekt verschoben werden Iterator next() next() next() next() Collection Objekt Mark Egloff

34 Datenstrukturen in (Teil 2) Iteration - Mit einem Iterator durch die Daten wandern > Das Iterator -Pattern erlaubt uns über eine beliebige Datenstruktur zu iterieren ohne die genaue Implementation zu kennen > Unsere Applikation bedient sich dabei nur einem zentralen Interface Iterator << Interface>> Collection creates << Interface>> Iterator use MyApp iterator() hasnext() next() main() creates ArrayList has ArrayListIterator Iterator Pattern Mark Egloff

35 Datenstrukturen in (Teil 2) Iteration - Mit einem Iterator durch die Daten wandern > Für Iteratoren definiert die -Bibliothek zwei unterschiedliche Schnittstellen. Das hat historische Gründe. > Die Schnittstelle java.util.enumeration gibt es seit den ersten -Tagen; die Schnittstelle java.util.iterator gibt es seit 1.2 (seit der Collection-API). Der Typ Iterator sollte in der Regel verwendet werden. > Beide Schnittstellen funktionieren nach dem demselben Prinzip. Sie besitzen eine Funktion, die jeweils das nächste Element erfragt z.b. next() und eine Funktion, die ermittelt, ob es überhaupt ein nächstes Element gibt z.b. hasnext(). So wandert der Iterator Element für Element ab. Mark Egloff

36 Datenstrukturen in (Teil 2) Iteration Auszug aus den Iterator Interfaces: interf ace java.util.enume ration +hasmoreelement s:boolean +nextelement:object public interface Enumeration { boolean hasmoreelements(); Object nextelement(); } interf ace java.util.iterator +hasnext:boolean +next:object +remove:void public interface Iterator { boolean hasnext(); Object next(); void remove(); } Der spezieller Unterschied ist hier, dass Iterator noch die Möglichkeit bietet während der Iteration ein Element aus der Liste zu entfernen Mark Egloff

37 Datenstrukturen in (Teil 2) Iteration - Mit einem Iterator durch die Daten wandern z.b. Iteration mittels dem Interface java.util.iterator import java.util.*;... Collection col = new LinkedList(); col.add("head"); col.add(...);...; // Iteration Iterator it = col.iterator(); while( it.hasnext() ) { } String s = (String) it.next(); // Casting von Object auf String Da next() ein java.lang.object zurückliefert muss entsprechend gecastet werden. Achtung wegen ClassCastException Mark Egloff

38 Datenstrukturen in (Teil 2) Iteration - Mit einem Iterator durch die Daten wandern > Seit 1.5 gibt es eine kürzere Version der for -Schleife um über eine Collection oder Array zu iterieren // herkömmliche Iteration for (Iterator it = col.iterator(); it.hasnext(); ) { } String s = (String) it.next(); // seit 1.5 for (Object o : col ) { } String s = (String) o; Achtung wegen ClassCastException. Die Collection col kann ja alles mögliche an Objekten beinhalten Mark Egloff

39 Datenstrukturen in (Teil 2) Iteration Collection während der Iteration bearbeiten Während einer Iteration ist es untersagt die Collection zu verändern z.b. Elemente hinzuzufügen oder zu entfernen. Wer es trotzdem tut erhält eine ConcurrentModificationException. for (Iterator it = col.iterator(); it.hasnext(); ) { String s = (String) it.next(); if (... ) col.remove( s ))...; Laufzeitfehler! } > Das Interface Iterator bietet eine Methode remove() an um während der Iteration gleich das aktuelle Elemente zu entfernen for (Iterator it = col.iterator(); it.hasnext(); ) { String s = (String) it.next(); if (... ) it.remove() )...; richtig!! } Mark Egloff

40 Datenstrukturen in (Teil 2) Generische Datentypen in der Collection-API (1/5) > Ein grosses Problem bei der Handhabung von Collections ist, dass sie prinzipiell offen für jeden Typ sind, da sie Objekte vom allgemeinsten Typ java.lang.object beim Speichern entgegennehmen und diesen auch als Rückgabe liefern. Problem: Objekte gehen als Ihre Datentypen (Fussball, Fisch, Gitarre, Auto) rein und kommen aber als generisches Objekt wieder raus Casting ist notwendig! Mark Egloff

41 Datenstrukturen in (Teil 2) Generische Datentypen in der Collection-API (2/5) > Falsches Casting bzw. das Auftreten von ClassCastException zur Laufzeit ist daher keine Seltenheit. z.b. falsches Casting bei einer Collection mit gemixten Datentypen Collection col = new ArrayList(); col.add( "Text " ); col.add( new Integer(123) ); // mixed types for (Iterator it = col.iterator(); it.hasnext(); ) { String s = (String) it.next(); // Laufzeitfehler } beim 2. Element Mark Egloff

42 Datenstrukturen in (Teil 2) Generische Datentypen in der Collection-API (3/5) > Um diese Handhabung zu vereinfachen und um ClassCastExceptions zu vermeiden, wurde seit 1.5 eine Möglichkeit geschaffen um den genauen Typ anzugeben Kompromisslösung mittels Generics : Es wird eine Collection für einen Typ (z.b. Fisch) geschaffen. Alle gehen als Fische rein und kommen auch wieder als Fische raus Mark Egloff

43 Datenstrukturen in (Teil 2) Generische Datentypen in der Collection-API (4/5) > Bei der Instanzierung muss die Klasse der Elemente angegeben werden. Diese Typangabe erfolgt mit <ClassName> jeweils nach dem Klassennamen der Collection > Der Syntax ähnelt dem Prinzip der Templates in C++. z.b. Typisierte Collection ab 1.5 Collection<String> col = new ArrayList<String>(); col.add( "Text " ); col.add( new Integer(123) ); // Compilerfehler, nur String erlaubt Mark Egloff

44 Datenstrukturen in (Teil 2) Generische Datentypen in der Collection-API (5/5) > Bei diesen typisierten Collections muss dann später nicht mehr gecastet werden. z.b. Typisierte Collection ab 1.5 List<String> col = new ArrayList<String>(); col.add( "Head" ); col.add( "first" ); col.add( "" ); // kein Casting mehr notwendig: String first = col.get(1); for (String s : col ) { System.out.println(s); } // get() gibt nun direkt String zurück // direkter String-Iterator Mark Egloff

45 Datenstrukturen in (Teil 2) > Maps in Mark Egloff

46 Datenstrukturen in (Teil 2) Maps > Eine Map ist ein Assoziativspeicher, der Objekte unter Verwendung einer Zuordnung (Index) verwaltet. > Eine Map sind wie Postfächer anzusehen. Sie speichern die Objekte anhand eines zusätzlichen Schlüssels (Key) ab, welcher als Index dient. Dieser Schlüssel ist natürlich wiederum ein Objekt. Key Key Daten ablegen holen Daten Map Mark Egloff

47 Datenstrukturen in (Teil 2) Map s in > In bildet das Interface java.util.map die Basis für alle Maps. Sie ist nicht kompatibel zum Interface java.util.collection > Die Collection-API bietet wie bei den Set s entsprechend eine sortierte und unsortierte implementationen an. Übersicht verschiedener Implementationen > java.util.hashmap Schnelle Implementierung durch Hashing-Verfahren. Ist nicht- threadsafe > java.util.hashtable Schnelle Implementierung durch Hashing-Verfahren. Ist threadsafe > java.util.treemap Besitzt ein langsamerer Zugriff, doch dafür sind alle Schlüssel sortiert. Sie sortiert die Schlüssel in einen Binärbaum ein. Ist nicht- threadsafe Mark Egloff

48 Datenstrukturen in (Teil 2) Map s Übersicht verschiedener Implementationen interf ace Map Dictionary Cloneable java.io.serializable Hashtable AbstractMap Map Cloneable java.io.serializable HashMap AbstractMap AbstractMap SortedMap Cloneable java.io.serializable TreeMap empty:boolean Mark Egloff

49 Datenstrukturen in (Teil 2) Map s Auszug aus dem Interface java.util.map interf ace Map +size:int +containskey:boolean +containsvalue:boolean +get:object +put:object +remove:object +putall:void +clear:void +keyset:set +values:collection +entryset:set +equals:boolean +hashcode:int public interface Map { int size(); boolean containskey(object key); boolean containsvalue(object value); Object put(object key, Object value); Object get(object key); Object remove(object key); void clear();... } Mark Egloff

50 Datenstrukturen in (Teil 2) Map s Beispiel mit HashMap, Standard Schlüssel (1/2) public class Kunde { public int kndnnummer; public String vorname; public String nachname; } public Kunde( int kndnummer, String vorname, String nachname) { this.kndnummer = kndnummer; this.vorname = vorname; this.nachname = nachname; } Mark Egloff

51 Datenstrukturen in (Teil 2) Map s Beispiel mit HashMap, Standard Schlüssel (2/2) import java.util.*; public class Run { public static void main(string args[]) { Map map = new HashMap(); map.put( new Integer(112), new Kunde(112, "Hans", "Müller")); map.put( new Integer(113), new Kunde(113, "Max", "Moritz")); } } Kunde k1 = (Kunde) map.get( new Integer(112) ); Kunde k2 = (Kunde) map.get( new Integer(113) ); Als Schlüssel muss ein Objekt bzw. Klasse verwendet werden, welche eine Implementation der hashcode() Methode besitzt Mark Egloff

52 Datenstrukturen in (Teil 2) Map s Beispiel mit HashMap, Ieration (1/2) z.b. Iteration durch eine Map, durch alle Schlüssel und alle Elemente // herkömmliche Iteration Iterator it = map.keyset().iterator(); while( it.hasnext() ) { Object key = it.next(); Kunde k = ( Kunde ) map.get( key ); } System.out.println( k ); // unsortierte Ausgabe // ab 1.5 mit erweiterter for- Schleife for ( Object key : map.keyset() ) { Kunde k = ( Kunde ) map.get( key ); } System.out.println( k ); // unsortierte Ausgabe Mark Egloff

53 Datenstrukturen in (Teil 2) Map s Beispiel mit HashMap, Iteration (2/2) // ab 1.5 mit der Benützung von <Generics> vereinfacht sich die Iteration HashMap<Integer,Kunde> map = new HashMap<Integer,Kunde>(); map.put( new Integer(112), new Kunde(112, "Hans", "Müller"));... for ( Integer key : map.keyset() ) { // kein Casting notwendig } z.b. Iteration durch eine Map, durch alle Schlüssel und alle Elemente Kunde k = map.get( key ); System.out.println( k ); Der Einsatz von <Generics> ist nur möglich falls die Typen für die Schlüssel sowie für die Datenelemente immer gleich sind Mark Egloff

54 Datenstrukturen in (Teil 2) Map s Beispiel mit TreeMap (1/2) import java.util.*; public class Run { public static void main(string args[]) { Map map = new TreeMap(); map.put( new Integer(112), new Kunde(112, "Hans", "Müller")); map.put( new Integer(113), new Kunde(113, "Max", "Moritz")); Einfacher Austausch der Implementation. } } Kunde k1 = (Kunde) map.get( new Integer(112) ); Kunde k2 = (Kunde) map.get( new Integer(113) ); Als Schlüssel muss ein Objekt bzw. Klasse verwendet werden, welche das Interface java.lang.comparable implementiert Mark Egloff

55 Datenstrukturen in (Teil 2) Map s Beispiel mit TreeMap (2/2) // herkömmliche Iteration Iterator it = map.keyset().iterator(); while( it.hasnext() ) { Object key = it.next(); Kunde k = ( Kunde ) map.get( key ); } z.b. Iteration durch eine Map, durch alle Schlüssel und alle Elemente System.out.println( k ); // sortierte Ausgabe Da map hier eine SortedMap ist, erfolgt die Iteration durch die Schlüssel sortiert Mark Egloff

56 Datenstrukturen in (Teil 2) Map s Funktionsweise von HashMap & TreeMap > java.util.hashmap Es wird beim Einfügen vom jeweiligen Key-Objekt ein eindeutiger Wert (Identifikationsnummer, Hash) berechnet. Hierzu wird vom Key die Methode hashcode() aufgerufen (vererbt von java.lang.object ). Diese muss für eigene Key-Klassen überschrieben werden. > java.util.treemap Verwendet intern für die Sortierung das Interface java.lang.comparable. Das jeweilige Key-Objekt muss dieses Interface unterstützen, ansonsten wird eine ClassCastException ausgelöst. Bei eigenen Keys muss dieses Interface implementiert werden. Mark Egloff

57 Datenstrukturen in (Teil 2) > Hilfsklasse Collections Mark Egloff

58 Datenstrukturen in (Teil 2) Hilfsklasse java.util.collections > Ähnlich wie bei den Arrays (java.util.arrays) existiert auch für die Collections und Maps eine Hilfsklasse mit nützlichen statischen Funktionen: java.util.collections > Die Klasse bietet bekannte Dinge wie binäre Suche, Ermittlung des min/max Elementes, Sortierung sowie Generierung von Zufallsreihenfolgen an. Eine wesentliche weitere Funktionalität sind die Factory - Methoden um threadsafe oder immutable Collections zu erzeugen. z.b. Erzeugung einer threadsafe - Liste mittels Collections Collection c = new ArrayList(); // ArrayList ist nicht threadsafe... Collection sc = Collections.synchronizedCollection(c); sc.add( "Text " ); Mark Egloff

59 Datenstrukturen in (Teil 2) > Handhabungen von Collections Mark Egloff

60 Datenstrukturen in (Teil 2) Collections sind Objekte > Collections sind normale Objekte, es gelten somit die gleichen bzw. ähnliche Gesetze, wie wir schon kennen gelernt haben. > Alle Implementationen von java.util.collection sowie java.util.map stammen automatisch von java.lang.object ab. > All diese Container besitzen somit eine equals() sowie eine clone() Methode. Doch wie wir schon bei den Arrays gesehen haben, müssen wir die Details hierzu anschauen z.b. Vergleich von 2 Collections Collection c1 = new ArrayList();... Collection c2 = new ArrayList(); if ( c1.equals(c2) ) geht das?? Was passiert hier genau? Mark Egloff

61 Datenstrukturen in (Teil 2) Vergleichen von Collections (1/2) > Beide Interfaces java.util.collection sowie java.util.map bieten die Methode equals() an. > Die Implementation dieser Methode befindet sich bei der jeweiligen Implementations-Klasse des Interfaces (z.b. java.util.arraylist ). Deshalb lohnt es sich jeweils ein Blick in die Doc der jeweiligen Klasse zu werfen > Die Klassen im API verhalten sich nach den folgenden Regeln. Eine Collection ist gleich wenn 1. sie von derselben Klassen-Familie sind z.b. (List!= Set) 2. sie die gleiche Anzahl an Elementen in gleicher Reihenfolge aufweisen 3. Im Falle von Map die Elemente gleich indexiert sind 4. die jeweiligen Element mit a1.equals(b1)== true ergeben Mark Egloff

62 Datenstrukturen in (Teil 2) Vergleichen von Collections (2/2) z.b. Anwendung der equals() Methode bei gleichen Klasse Collection c1 = new ArrayList(); Collection c2 = new LinkedList();... if (c1.equals(c2))... // funktioniert richtig Bei Elementen eigener Klassen muss die equals() Methode implementiert sein z.b. Anwendung der equals() Methode bei unterschiedlicher Klasse Collection c1 = new ArrayList(); Collection c2 = new HashSet();... if (c1.equals(c2))... // immer false ja nie machen! Mark Egloff

63 Datenstrukturen in (Teil 2) Elemente in Collections prüfen mit contains() > Die Collection Klassen bieten eine Methode an, die überprüft ob sich ein gleiches Element schon in der Collection befindet: contains() > Bei Map existieren entsprechend 2 containsxxx() Methoden. Einmal für die Schlüssel containskey() und einmal für die Elemente selber containsvalue() > Diese Methode ruft intern von jedem Element die equals() Methode auf. Bei Elementen eigener Klassen muss deshalb die equals() Methode implementiert sein z.b. Anwendung der contains() Methode Collection c = new ArrayList();... if (c.contains( "DATA" ))... Mark Egloff

64 Datenstrukturen in (Teil 2) Klonen von Collections > Um eine Collection zu klonen müssen wir die clone() Methode von der jeweiligen Implementations-Klasse aufrufen. Die Interfaces Collection oder Map kennen das clone() selber nicht. > Die clone() Methode selber kopiert nur den Container (die Hülle). Die Elemente selber werden nicht kopiert (Shallow Copy oder Flache Kopie). Es verhält sich somit gleich wie bei den Arrays. > Ein deep - Copy existiert nicht in, man müsste selber eine entsprechende Hilfs-Methode schreiben z.b. Anwendung der clone() Methode ArrayList al = new ArrayList();... Collection c = (Collection) al.clone(); Mark Egloff

65 Datenstrukturen in (Teil 2) Collections und Arrays > Manchmal muss man zwischen Arrays und Collections wechseln. Hierzu werden von den Klassen entsprechende Methoden angeboten > Das Interface java.util.collection bietet die Methode toarray() an um die Collection in ein Array zu überführen > java.util.arrays bietet eine Hilfsmethode um einen Array in eine Liste zu wandeln Arrays.asList() z.b. Collection in Array wandeln und wieder zurück Collection c = new ArrayList(); c.add( "" );... String[] sarray = (String[]) c.toarray( new String[]{} ); c = Arrays.asList(sArray); Mark Egloff

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

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

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

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 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

4.4.9 Das Java Collection Framework

4.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

Mehr

Programmiertechnik II

Programmiertechnik 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,

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

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

Teil V. Generics und Kollektionen in Java

Teil 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

Mehr

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

java.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

Mehr

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der 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 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

Mehr

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

Wo 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,

Mehr

Grundkonzepte java.util.list

Grundkonzepte 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.

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

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

Einstieg in die Informatik mit Java

Einstieg 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

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

Collections. Arthur Zaczek. Nov 2015

Collections. 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

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

Kapitel 7: Java Collection Teil I

Kapitel 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

Mehr

Programmieren in Java

Programmieren 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

Mehr

Abstrakte Datentypen und Java

Abstrakte 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

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

Objektorientierte Implementierung

Objektorientierte Implementierung Objektorientierte Implementierung 10) Verfeinern von Assoziationen mit dem Java-2 Collection Framework Softwaretechnologie, Prof. Uwe Aßmann, Prof. Heinrich Hussmann 1 Objektorientierte Implementierung

Mehr

Vorlesung Programmieren

Vorlesung 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

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

Programmieren 2 16 Java Collections und Generizität

Programmieren 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

Mehr

Kapitel 12: Java Collection Teil II

Kapitel 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

Mehr

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

Lineare 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

Mehr

Software Entwicklung 1

Software 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

Mehr

C# - 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 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

Mehr

Programmierkurs Java

Programmierkurs 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

Mehr

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Ü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

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 Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList

Mehr

Java I Vorlesung Collections

Java 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

Mehr

Programmieren I. Kapitel 13. Listen

Programmieren 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

Mehr

Grundlagen der Informatik Generische Klassen

Grundlagen 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

Mehr

Programmieren 2 Übung Semesterwoche 2

Programmieren 2 Übung Semesterwoche 2 Programmieren 2 Übung Semesterwoche 2 1. Stack (LIFO: Last-In--First-Out) Implementieren und testen Sie eine Klasse Stack, so dass beliebig viele Objekte eines vorgegebenen Datentyps (z. B. String) auf

Mehr

Algorithmen 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 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

Mehr

Übung Algorithmen und Datenstrukturen

Ü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:

Mehr

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

Vom 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

Mehr

Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik

Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik Programmieren II Datenstrukturen / Das Collection-Framework Heusch 14 Ratz 12.7 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Datenstrukturen (1) Datenstrukturen dienen dazu,

Mehr

Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik

Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik Programmieren II Datenstrukturen / Das Collection-Framework Heusch 14 Ratz 12.7 www.kit.edu Datenstrukturen (1) Datenstrukturen sind strukturierte Sammlungen von Daten die dazu dienen, Informationen im

Mehr

Programmieren in Java -Eingangstest-

Programmieren 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

Mehr

Programmieren in Java

Programmieren 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

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP 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

Mehr

Programmieren in Java

Programmieren 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

Mehr

ALP II Dynamische Datenmengen

ALP 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

Mehr

Kapitel 12: Induktive

Kapitel 12: Induktive Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter

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

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

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

Programmieren 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

Mehr

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

Javakurs 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

Mehr

public interface Stack<E> { public void push(e e); public E pop();

public 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

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

Java I Vorlesung 6 Referenz-Datentypen

Java 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:

Mehr

Vorlesung Programmieren

Vorlesung 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

Mehr

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Klassenbibliothek Kollektionen Anforderungen der Kollektionen an ihre Elemente Iteratoren Seite 1 Klassenbibliothek Seite 2 Java

Mehr

Heute. 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. 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

Mehr

Grundkurs Informatik. Viele Schränke bilden eine Schrankwand

Grundkurs Informatik. Viele Schränke bilden eine Schrankwand Viele Schränke bilden eine Schrankwand Das einfache Projekt Schrankwand könnte so erweitert werden, dass die Schrankwand eine beliebige Zahl von Schränken enthalten kann. In diesem Fall brauchen wir statt

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

12 Abstrakte Klassen, finale Klassen und Interfaces

12 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,

Mehr

Collections. Datamining und Sequenzanalyse. Marvin Meusel, Bertram Vogel

Collections. 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

Informatik II Prüfungsvorbereitungskurs

Informatik II Prüfungsvorbereitungskurs Informatik II Prüfungsvorbereitungskurs Tag 4, 23.6.2016 Giuseppe Accaputo g@accaputo.ch 1 Programm für heute Repetition Datenstrukturen Unter anderem Fragen von gestern Point-in-Polygon Algorithmus Shortest

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) ArrayList 0 1 2 Obj0 Obj1 size() - 1 15.12.2014 CuP - VO 2 Auer 1 ArrayList import java.util.arraylist; ArrayList buchliste; buchliste = new ArrayList();

Mehr

Kapitel 5: Interfaces

Kapitel 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,

Mehr

Vorlesung Inf-B

Vorlesung Inf-B Vorlesung Inf-B stehn@mi.fu-berlin.de Quelle Diese Folien basieren auf dem Java-Tutorial Generics von Gilad Bracha http://java.sun.com/docs/books/tutorial/extra/generics/ 2 Motivierendes Beispiel List

Mehr

Grundlagen der Informatik 0

Grundlagen 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

Mehr

Teil VII. Hashverfahren

Teil 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:

Mehr

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Schwerpunkte. 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

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

FH 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

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 6 Prof. R. Westermann, A. Lehmann, R.

Mehr

1 Hashing und die Klasse String

1 Hashing und die Klasse String 1 Hashing und die Klasse String Die Klasse String stellt Wörter von (Unicode-) Zeichen dar. Objekte dieser Klasse sind stets konstant, d.h. können nicht verändert werden (immutable). Die Zeichenkette ist

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 15 Java API Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD), FAKULTÄT FÜR INFORMATIK

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 08: Dynamische Arrays Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Arrays anpassen Übungsaufgabe von letzter Stunde Array-Elemente Einfügen

Mehr

6. Interfaces Grundlagen der Programmierung 1 (Java)

6. Interfaces Grundlagen der Programmierung 1 (Java) 6. Interfaces Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 22. November 2005 Einordnung im Kontext der Vorlesung

Mehr

Rückblick: Inf A - Algorithmen. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 07: Collections 1. Inhalt.

Rückblick: Inf A - Algorithmen. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 07: Collections 1. Inhalt. Universität Osnabrück 1 Rückblick: Inf A - Algorithmen 3 - Objektorientierte Programmierung in Java Vorlesung 07: Collections 1 SS 2006 Prof. Dr. F.M. Thiesing, FH Osnabrück Abstrakte Datentypen Liste

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

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Sortierte Listen 2. Stacks & Queues 3. Teile und Herrsche Nächste Woche: Vorrechnen (first-come-first-served)

Mehr

Verkettete Datenstrukturen: Listen

Verkettete 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).

Mehr

Vorlesung 09: Mengen. Peter Thiemann SS 2010

Vorlesung 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

Mehr

Algorithmen & Datenstrukturen Midterm Test 2

Algorithmen & Datenstrukturen Midterm Test 2 Algorithmen & Datenstrukturen Midterm Test 2 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie 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

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Abstrakte Datentypen: Maps Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 48 Abstrakte Datentypen:

Mehr

Datenstrukturen in Java

Datenstrukturen in Java Datenstrukturen in Java SEP 350 Datenstrukturen Datenstrukturen ermöglichen Verwaltung von / Zugriff auf Daten (hier: Objekte) Datenstrukturen unterscheiden sich duch Funktionalität Implementierung modulares

Mehr

Aufgabe 1 (Programmanalyse, Punkte)

Aufgabe 1 (Programmanalyse, Punkte) 2 Aufgabe 1 (Programmanalyse, 8 + 6 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Schreiben Sie hierzu jeweils die ausgegebenen Zeichen hinter den Kommentar OUT:. public class

Mehr

Objektorientierte Softwareentwicklung

Objektorientierte Softwareentwicklung Objektorientierte Softwareentwicklung Part 6 Exceptions und Collections Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur (siehe Part 1) erstellt. Darüber hinaus sind Teile direkt

Mehr

Allgemeine Informatik II

Allgemeine Informatik II Klausur zur Vorlesung Allgemeine Informatik II Prof. J. Fürnkranz Technische Universität Darmstadt Sommersemester 2009 (Klausur SS09) Termin: 3. 9. 2009 Name: Vorname: Matrikelnummer: Fachrichtung: Punkte:

Mehr

1 Abstrakte Datentypen

1 Abstrakte Datentypen 1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;

Mehr

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine

Mehr

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr Organisatorisches Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, 14.10., 14 Uhr bis Do, 23.10., 8Uhr. 14.10.2014 IT I - VO 1 1 IT I: Heute Wiederholung CuP ctd: this Arrays, ArrayLists Schleifen:

Mehr

7. Kapitel COLLECTIONS. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

7. Kapitel COLLECTIONS. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm 7. Kapitel COLLECTIONS Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Übersicht 1 1. Programmstrukturierung mit Paketen (packages) 2. Vererbung 3. Abstrakte Klassen und Interfaces 4. Ausnahmebehandlung

Mehr

Algorithmen und Datenstrukturen 11

Algorithmen und Datenstrukturen 11 5. Juli 2012 1 Besprechung Blatt 10 Fragen 2 Hashing Allgemein, Hashtablestruktur Sondierungsverfahren 3 Anonyme und innere Klassen Anonyme Klassen Innere Klassen 4 Zirkuläre Arrays 5 Vorbereitung Blatt

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 10: Mehr zu Arrays & Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Arrays und die Verwendung der ArrayList 2. Teil: Weitere Aspekte

Mehr

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 9.5.07 Übersicht 1 Was sind? 2 Vereinbarung von n 3 Erzeugen von n 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale 6 als Objekte, Referenzen Kopieren

Mehr

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

4. 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

Mehr

Selbststudium OOP7 & ALG2 Auftrag

Selbststudium OOP7 & ALG2 Auftrag Selbststudium OOP7 & ALG2 Auftrag Kapitel 5.6 1. zu bearbeitende Aufgaben: 5.24 bis 5.30 5.24: Return Method Set entryset() V get(object key) Set keyset() V put(k key, V value) void

Mehr