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 von ArrayList 4 Verwendung von Iteratoren
Gliederung 3 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung von ArrayList 4 Verwendung von Iteratoren
Überblick Collections Eine Collection ist eine Klasse, die mehrere gleichartige Elemente zusammenfasst. Viele solche Collection-Klassen sind im Java Collections Framework enthalten. Unterschied zu Feldern Flexiblere Möglichkeiten, viele Varianten Veränderliche Länge Etwas schwieriger zu programmieren Unterschied zu selbst geschriebenen Klassen Weniger eigener Aufwand Einheitliche, standardisierte Klassen aus JDK Collections Framework gut ausgetestet und effizient 4 / 15
Gliederung 5 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung von ArrayList 4 Verwendung von Iteratoren
Hierarchie von Collections 6 / 15 Alle Collection-Interfaces und -Klassen basieren auf dem Interface Collection. Sie sind i.a. generisch mit dem Typparameter E für die Elemente definiert, z.b. public interface C o l l e c t i o n <E> {... } Ohne generische Typparameter wird als Elementtyp Object verwendet. Dies dient zur Kompatibilität mit Programmen, die vor Java Version 5 geschrieben wurden.
7 / 15 Collections: Interfaces Beispiele für Interfaces: Collection: das grundlegende Interface zur Zusammenfassung mehrerer gleichartiger Elemente Set: Menge, jedes Element darf nur einmal vorkommen List: geordnete Liste, Elemente dürfen mehrfach vorkommen Queue: Schlange zur Bearbeitung der Elemente, meistens nach dem FIFO-Prinzip (first in, first out) Map: bildet jeweils einen Schlüssel (anstelle des Feldindex) auf ein Element ab; die Schlüssel müssen eindeutig sein SortedSet: geordnete Menge SortedList: geordnete Liste
Collections: Klassen Beispiele für Collection-Klassen: ArrayList: Implementierung von List, ähnlich wie ein herkömmliches Feld, Zugriff auf Elemente in konstanter Zeit O(1) LinkedList: Implementierung von List, intern als doppelt verkettete Liste realisiert (zu jedem Element ist der Zugriff auf seinen Nachfolger und Vorgänger möglich), Zugriff auf einzelne Elemente ist aufwendiger O(n) HashSet: Implementierung von Set HashMap: Implementierung von Map LinkedList: Implementierung von Queue und viele mehr Darüber hinaus gibt es noch Implementierungen für spezielle Zwecke (Concurrent Implementierungen für Mehrprozessorsysteme, Convenience-Implementierungen für leere Menge, usw.) 8 / 15
Gliederung 9 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung von ArrayList 4 Verwendung von Iteratoren
10 / 15 Verwendung von ArrayList Gemeinsame Zugriffsmethoden aller Collections: boolean add (E element) fügt das Element element zur Collection hinzu; das Ergebnis der Methode gibt an, ob dies erfolgreich war void clear () löscht alle Elemente boolean contains (E element) prüft, ob die Collection das Element e enthält boolean remove (E element) entfernt das Element element aus der Collection; das Ergebnis der Methode gibt an, ob dies erfolgreich war int size () liefert die Anzahl der Elemente in der Collection
Verwendung von ArrayList Einige spezielle Zugriffsmethoden von ArrayList: ArrayList () erzeugt eine leere neue ArrayList void add (int index, E element) fügt das Element element an Position index ein boolean isempty () prüft, ob die ArrayList leer ist E remove (int index) entfernt das Element an Position index und liefert eine Referenz auf das entfernte Element zurück E get (int index) liefert eine Referenz auf das Element an Position index zurück E set (int index, E element) ersetzt das Element an Position index durch element; liefert als Ergebnis eine Referenz auf das ersetzte frühere Element 11 / 15
Beispiel zu ArrayList 12 / 15 / / l e e r e L i s t e von S t r i n g s erzeugen A r r a y L i s t <String > l i s t e = new A r r a y L i s t <String > ( ) ; / / e i n i g e S t r i n g s hinzufuegen l i s t e. add ( Ada Lovelace ) ; l i s t e. add ( Konrad Zuse ) ; l i s t e. add ( Jimmy Wales ) ; / / testen ob die L i s t e l e e r i s t i f ( l i s t e. isempty ( ) ) System. out. p r i n t l n ( L i s t e i s t l e e r! ) ; / / a n d e r n f a l l s L i s t e durchlaufen else for ( i n t i =0; i <l i s t e. size ( ) ; i ++) System. out. p r i n t l n ( l i s t e. get ( i ) ) ;
Gliederung 13 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung von ArrayList 4 Verwendung von Iteratoren
14 / 15 Verwendung von Iteratoren Zum Durchlaufen einer Collection wird oft ein Iterator eingesetzt. Der Iterator einer Collection kann mit der Methode Iterator iterator () beschafft werden. Iterator ist ein Interface, passend zur jeweiligen Collection-Klasse. Gemeinsame Methoden von Iteratoren: E next () liefert das nächste Element vom Typ E in der Collection boolean hasnext () gibt an, ob noch weitere Elemente in der Collection vorhanden sind
Beispiel zu Iterator 15 / 15 / / l e e r e L i s t e von S t r i n g s erzeugen A r r a y L i s t <String > l i s t e = new A r r a y L i s t <String > ( ) ; / / e i n i g e S t r i n g s hinzufuegen l i s t e. add ( Ada Lovelace ) ; l i s t e. add ( Konrad Zuse ) ; l i s t e. add ( Jimmy Wales ) ; / / l i s t e m i t t e l s I t e r a t o r durchlaufen I t e r a t o r <String > i t e r = l i s t e. i t e r a t o r ( ) ; while ( i t e r. hasnext ( ) ) System. out. p r i n t l n ( i t e r. next ( ) ) ;